设计模式列表

 创建型结构型行为型

 
工厂方法适配器解释器
  模板方法
对象
 
抽象工厂适配器责任链
生成器桥接命令
原型组合迭代器
单例装饰中介者
 外观备忘录
 享元观察者
 代理状态
  策略
  访问者

 

 

设计模式

功能与目的

精髓

主要步骤

1

 简单工厂模式

 

 

 

2

 策略模式

 不同的选择,对应不同的策略,然后,得到结果。

 相同的方式调用不同的算法。多态。区别工厂模式。

抽象策略类 具体策略类 Context类(含有“抽象策略类”)

3

 单一职责原则

 一个类一个职责。一个类的职责不能过多,否则不易维护。

 

 

4

 开放-关闭原则

 

 对类更改是封闭,对类扩展开放。

 

5

 依赖倒转原则

 细节依赖抽象

1.高层模块不应该依赖底层模块,两个都应该依赖抽象。 2.抽象不应该依赖于细节,细节应该依赖于抽象。 3.里氏代换原则(多态)

 

6

 装饰模式 

 类的功能分为核心功能和装饰功能,装饰功能可以动态添加。

抽象装饰类继承组件类,(1)装饰方法(2)操作方法重写:执行原组件对象方法

组件类 抽象装饰类继承组件类,(1)装饰方法(2)操作方法重写:执行原组件对象方法 具体装饰类继承抽象装饰类,方法重写:执行原组件对象方法 客户端进行逐级装饰

7

 代理模式

 追求者,代理(含有追求者),目标

 访问对象引入间接性,通过间接性,可以附加更多的功能。

 1.抽象类 2.追求者类继承抽象类 3.代理类继承抽象类,含有追求者

8

 工厂模式

 降低耦合,单独的类创建特定实例。

不同工厂生产不同物品。多态。

1.多个不同的产品类,用于生产不同的产品 2.不同的工厂产生不同的产品对象

9

 原型模式 

 对象的复制

 浅复制和深复制。克隆的方法仅能复制值类型的字段,引用型字段仅能复制地址,需要深复制。所以,类WorkExperience(引用型)需要有克隆方法,复制该类值类型的字段。多层引用,克隆方法要到值类型为止。

WorkExperience类添加克隆方法 Resume私有构造方法,work对象克隆 调用Resume私有构造方法

10

 模板方法模式

 父类含有通用代码,子类重写父类。

 把不变行为搬到超类(父类),去除子类来体现它的优势。

父类 子类

11

 迪米特法则

 最少知识原则

 每个类应该尽量降低成员的访问权限。两个不必联系的类,如果一个类需要调用另一个类,可以通过第三方转发调用。

 

12

 外观模式

 系统包含子系统,客户端与系统打交道。

 客户端与外部系统交互,降低耦合,使得子系统可以独立改变。

子系统类 外观类(含有子系统类) 客户端调用外观类

13

 建造者模式

 须重写抽象方法,防止具体方法漏掉。

 先框架(抽象)后填充(具体)

 1.抽象建造者(抽象方法类) 2.具体建造者(具体方法类,含有产品) 3.指挥者(指挥“建造者”) 4.产品类

14

 观察者模式

 设置主题,主题变化,通知观察者

 观察者和主题解耦

抽象主题:增删观察者(针对抽象编程,减少与具体类的耦合),通知观察者(即:更新观察者状态) 具体主题:主题变化 抽象观察者:更新状态 具体观察者:注册

15

 抽象工厂模式

 反射+抽象工厂模式

 新增一种情况,实现改动代码最少的目的。

DataAccess类 IUser接口 SqlServerUser类(继承IUser), MySQLUser类(继承IUser)

16

 状态模式 

 分支判断,状态转换

 具体状态类的内部要有判断条件,以及状态的转换。

抽象状态类 具体状态类 工作类:获取具体状态类,执行状态类相应的方法。

17

 适配器模式

 目标借口转换成客户希望的借口。

 类似翻译,与两个类都有联系。

目标接口类 需要适配类 适配器类(继承目标接口类,内部含有“需要适配类”)

18

 备忘录模式

 还原操作

使用备忘录,可以将对象的属性屏蔽。

游戏角色类(保存方法,恢复方法) 备忘录类,存储游戏角色信息 3.管理类(调用备忘录)

19

 组合模式 

 部分与整体的层次结构

 节点内部含有“list<抽象类> 子节点”

 1.节点内部含有“list<抽象类> 子节点” 2.节点的add()和remove()方法 3.节点的统一继承和方法重写

20

 迭代器模式

 被遍历对对象的类,遍历者类

 不暴露集合的内部结构,外部代码可以访问内部结构。

抽象聚集类 具体聚集类 抽象迭代器类 具体迭代器类(迭代方法)

21

 单例模式

 防止对象数量爆炸

 关键字“static”

私有静态类变量 私有构造方法 公有静态getInstance()方法

22

 桥接模型 

 分类的独立变化,不影响其它类。

 实现系统可能有多角度分类,每一种分类都可能变化,那么把这种多角度分离出来,让它们独立变化,减少耦合,

抽象类调用实现类对象的方法 抽象实现类 具体实现类

23

 命令模型

 3个部分:命令请求者,命令,命令执行者。

 需要撤销/恢复操作时,可能用到。

抽象命令类 具体命令类,含有“命令执行者” 命令执行者类 命令请求者,含有“设置命令”

24

 职责链模式

 要么本类处理,要么传递给上一级。

 改善大量分支判断难维护,灵活性差的缺点。

抽象处理类 具体处理类(含有上一级具体处理类)

25

 中介者模式

 会员A调用中介者,中介者调用会员B

 把交互复杂性变为了中介者的复杂性。

会员A(含有中介者) 中介者(含有会员A,会员B) 会员B(含有中介者)

26

 享元模式

 共享对象,减少实例。

 通过共享对象,减少实例总数,经常用于底层。

抽象网站类 具体网站类 网站工厂类,判断是否有对象存在

27

 解释器模式

 读取内容,根据规则,解释内容成另一种展示形式。

 区别适配器:只有一个解释类,适配器模式有3个类。

内容类 解释类

28

 访问者模式

 增加新的操作容易,增加新的结构困难。

 适用于数据结构稳定的系统,大多数情况下用不到。

元素类,调用状态方法 状态类 对象结构类(含有所有元素)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值