没有合适的资源?快使用搜索试试~ 我知道了~
23种设计模式详解PDF
试读
58页
需积分: 0 10 下载量 173 浏览量
更新于2024-08-03
收藏 2.52MB PDF 举报
设计模式
的分类
总体来说设计模式分为三大类:
创建型模式(5):
工厂方法模式
、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式(7):
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式(11):
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
23种设计模式详解
JackieZhengChina
已于
2024-06-16 15:39:59
修改
设计模式 的分类
总体来说设计模式分为三大类:
创建型模式(5):
工厂方法模式 、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式(7):
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式(11):
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
一、创建模式(5种)
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
1 工厂模式
1.1 简单工厂模式
定义:定义了一个创建对象的类,由这个类来封装实例化对象的行为。
举例:(我们举一个pizza工厂的例子)
pizza工厂一共生产三种类型的pizza:chesse,pepper,greak。通过工厂类(SimplePizzaFactory)实例化这三种类型的对象。类图如下:
内容来源:
csdn.net
作者昵称:
JackieZhengChina
原文链接:
https://admans.blog.csdn.net/article/details/139712494
作者主页:
https://admans.blog.csdn.net
转载 阅读模式
工厂类的代码:
简单工厂存在的问题与解决方法: 简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了开闭原则,所
以,从设计角度考虑,有一定的问题,如何解决?我们可以定义一个创建对象的抽象方法并创建多个不同的工厂类实现该抽象方法,这样一旦需要增加新的功能,直接增加
新的工厂类就可以了,不需要修改之前的代码。这种方法也就是我们接下来要说的工厂方法模式。
1 public class SimplePizzaFactory {
2 public Pizza CreatePizza(String ordertype) {
3 Pizza pizza = null;
4
5 if (ordertype.equals("cheese")) {
6 pizza = new CheesePizza();
7 }
8 else
9 if (ordertype.equals("greek")) {
10 pizza = new GreekPizza();
11 }
12 else
13 if (ordertype.equals("pepper")) {
14 pizza = new PepperPizza();
15 }
16
17 return pizza;
18 }
19 }
内容来源:
csdn.net
作者昵称:
JackieZhengChina
原文链接:
https://admans.blog.csdn.net/article/details/139712494
作者主页:
https://admans.blog.csdn.net
1.2 工厂方法模式
定义:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。
举例:(我们依然举pizza工厂的例子,不过这个例子中,pizza产地有两个:伦敦和纽约)。添加了一个新的产地,如果用简单工厂模式的的话,我们要去修改工厂代码,
并且会增加一堆的if else语句。而工厂方法模式克服了简单工厂要修改代码的缺点,它会直接创建两个工厂,纽约工厂和伦敦工厂。类图如下:
OrderPizza中有个抽象的方法:
两个工厂类继承OrderPizza并实现抽象方法:
abstract Pizza createPizza();
1 public class LDOrderPizza extends OrderPizza {
2 Pizza createPizza(String ordertype) {
3 Pizza pizza = null;
4
5 if (ordertype.equals("cheese")) {
6 pizza = new LDCheesePizza();
7 }
8 else
9 if (ordertype.equals("pepper")) {
10 pizza = new LDPepperPizza();
11 }
12
13 return pizza;
14 }
15 }
16
内容来源:
csdn.net
作者昵称:
JackieZhengChina
原文链接:
https://admans.blog.csdn.net/article/details/139712494
作者主页:
https://admans.blog.csdn.net
通过不同的工厂会得到不同的实例化的对象,PizzaStroe的代码如下:
解决了简单工厂模式的问题:增加一个新的pizza产地(北京),只要增加一个BJOrderPizza类:
17
18 public class NYOrderPizza extends OrderPizza {
19 Pizza createPizza(String ordertype) {
20 Pizza pizza = null;
21
22 if (ordertype.equals("cheese")) {
23 pizza = new NYCheesePizza();
24 }
25 else
26 if (ordertype.equals("pepper")) {
27 pizza = new NYPepperPizza();
28 }
29
30 return pizza;
31 }
32 }
1 public class PizzaStroe {
2 public static void main(String[] args) {
3 OrderPizza mOrderPizza;
4
5 mOrderPizza = new NYOrderPizza();
6 }
7 }
1 public class BJOrderPizza extends OrderPizza {
2 Pizza createPizza(String ordertype) {
3 Pizza pizza = null;
4
5 if (ordertype.equals("cheese")) {
6 pizza = new LDCheesePizza();
7 }
8 else
9 if (ordertype.equals("pepper")) {
10 pizza = new LDPepperPizza();
11 }
内容来源:
csdn.net
作者昵称:
JackieZhengChina
原文链接:
https://admans.blog.csdn.net/article/details/139712494
作者主页:
https://admans.blog.csdn.net
其实这个模式的好处就是,如果你现在想增加一个功能,只需做一个实现类就OK了,无需去改动现成的代码。这样做,拓展性较好!
工厂方法存在的问题与解决方法:客户端需要创建类的具体的实例。简单来说就是用户要订纽约工厂的披萨,他必须去纽约工厂,想订伦敦工厂的披萨,必须去伦敦工
厂。 当伦敦工厂和纽约工厂发生变化了,用户也要跟着变化,这无疑就增加 了用户的操作复杂性。为了解决这一问题,我 们可以 把工厂类抽象为接口,用户只需要去找默
认的工厂提出自己的需求(传入参数),便能得到自己想要产品,而不用根据产品去寻找不同的工厂,方便用户操作。这也就是我们接下来要说的抽象工厂模式。
1.3 抽象工厂模式
定义:定义了一个接口用于创建相关或有依赖关系的对象族,而无需明确指定具体类。
举例:(我们依然举pizza工厂的例子,pizza工厂有两个:纽约工厂和伦敦工厂)。类图如下:
工厂的接口:
工厂的实现:
12
13 return pizza;
14 }
15 }
1 public interface AbsFactory {
2 Pizza CreatePizza(String ordertype);
3 }
1 public class LDFactory implements AbsFactory {
2 @Override
内容来源:
csdn.net
作者昵称:
JackieZhengChina
原文链接:
https://admans.blog.csdn.net/article/details/139712494
作者主页:
https://admans.blog.csdn.net
剩余57页未读,继续阅读
资源推荐
资源评论
5星 · 资源好评率100%
134 浏览量
142 浏览量
158 浏览量
169 浏览量
141 浏览量
2012-11-01 上传
155 浏览量
2010-05-03 上传
141 浏览量
175 浏览量
187 浏览量
5星 · 资源好评率100%
192 浏览量
162 浏览量
资源评论
JackieZhengChina
- 粉丝: 4w+
- 资源: 287
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (35734838)信号与系统实验一实验报告
- (175797816)华南理工大学信号与系统Signal and Systems期末考试试卷及答案
- BLDC 无刷电机 脉冲注入 启动法 启动过程持续插入正反向短时脉冲;定位准,启动速度快; Mcu:华大hc32f030; 功能:脉冲定位,脉冲注入,开环,速度环,电流环,运行中启动,过零检测; 保护
- (3662218)学生宿舍管理系统数据库
- (4427850)编译原理 词法分析器
- (10675456)编译原理的词法分析语法分析
- (7964012)编译原理实验报告及源码
- (3913042)编译原理编译原理词法分析实验.rar
- (26198606)VUE.js高仿饿了么商城实战项目源码(未打包文件)
- 盘式电机 maxwell 电磁仿真模型 双转单定结构,halbach 结构,双定单转 24 槽 20 极,18槽 1 2 极,18s16p(可做其他槽极配合) 参数化模型,内外径,叠厚等所有参数均可调
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功