创建型 | 结构型 | 行为型 | |
类 | 工厂方法 | 适配器 | 解释器 |
模板方法 | |||
对象 | 抽象工厂 | 适配器 | 责任链 |
生成器 | 桥接 | 命令 | |
原型 | 组合 | 迭代器 | |
单例 | 装饰 | 中介者 | |
外观 | 备忘录 | ||
享元 | 观察者 | ||
代理 | 状态 | ||
策略 | |||
访问者 |
| 设计模式 | 功能与目的 | 精髓 | 主要步骤 |
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 | 访问者模式 | 增加新的操作容易,增加新的结构困难。 | 适用于数据结构稳定的系统,大多数情况下用不到。 | 元素类,调用状态方法 状态类 对象结构类(含有所有元素) |