设计模式
2019-04-09 08:47:52 78 举报
AI智能生成
设计模式思维导图
作者其他创作
大纲/内容
适应设计模式
Iterator模式
用于顺序遍历集合
抽象化遍历方法
循环实现和遍历实现解耦
Adapter模式
用于填补现有程序与所需程序之间的差异
类适配器模式(继承)
对象适配器模式(引用)
生成实例
Singleton模式
确保任何情况下只有一个实例
私有化构造函数
静态单例对象
提供静态方法获取静态单例对象
double-check lock避免多线程问题
Prototype模式
通过复制生成实例
Builder模式
用于组装具有复杂结构的实例
Builder定义构建程序
Director定义构建流程
具体构建程序可替换
Abstract Factory模式
将关联零件组装成产品
不关心零件的具体实现,只关心使用接口组装成产品
优点:增加零件的不同实现非常简单,只需要实现不同的具体零件类,并增加具体工厂
缺点:增加零件的数量非常困难,需要修改所有的具体工厂
一致性
Composite模式
容器与内容的一致性
能够使容器与内容具有一致性,创造出递归结构
Decorator模式
装饰物和被装饰物的一致性,拥有相同的API
被装饰物即使被装饰起来,API也不会被隐藏
主要功能是通过添加装饰类来增加对象的功能
实现了不修改被装饰的类即可增加新功能
添加一种新装饰物便可以添加不同的排列组合,增加不同的新功能,可以应对多功能对象的需求
缺点:导致程序中增加许多功能类似的小类
简单化
Facade模式
为互相关联的类整理出高层接口,让系统对外只有一个简单的接口
减少接口,弱化程序与外部的关联关系
可以递归使用,让系统更加简单
Mediator模式
发生任何事情通知仲裁者,并有仲裁者作出控制
不让各个对象之间互相沟通,而是让他们单独和仲裁者沟通
将控制逻辑交由仲裁者
ConcreteColleague可以复用,ConcreteMediator很难复用
避免浪费
Flyweight模式
通过尽量共享实例来避免new出实例
改变共享的对象将会对多个地方产生影响
共享的对象最好不依赖外部条件
Proxy模式
提供代理来控制对象的访问
uml
表示
属性
抽象
斜体显示
静态
下划线显示
可见性
公有
+
保护
#
私有
-
关系
实现
虚线三角箭头
继承
实线空心三角箭头
聚合
菱形实线箭头
只要一个类持有另一个类的实例
关联
Uses
Creates
Notifies
交给子类
Template Method模式
将具体的处理交给子类
父类定义处理流程的框架
子类实现具体处理
Factory Method模式
将实例的生成交给子类
使用Template Method模式将生成流程固定
ConcreteFactory生成ConcreteProduct
ConcreteProduct构造函数最好不要是public,强制只能使用Factory生成
ConcreteFactor应该是ConcreteProduct的友元类,因为需要调用受保护的构造函数
分开考虑
Bridge 模式
建立类的实现层次结构和类的功能层次结构之间的联系
类的功能层次结构:子类通过新增方法来添加新功能
类的实现层次结构:子类通过实现接口来增加新实现
增加的功能可以使用所有实现
Strategy 模式
整体地替换算法
使用委托这种弱关联可以很方便地整体替换算法
访问数据结构
Visitor模式
将处理从数据结构中分离
易于增加访问者(处理方式)
难于增加被访问者(数据结构)
被访问的Element必须向Visitor提供足够的信息
符合单一职责原则
Chain of Reponsibility模式
将多个对象组成职责链,并按顺序决定谁来负责
可弱化请求方和职责方的关联关系,使他们都可以成为独立的组件
简化处理方逻辑,具体处理的判断交由职责链完成
管理状态
Observer模式
当观察对象的状态发生变化时,会通知观察者,适用于根据对象状态进行相应处理的场景
利用抽象类和接口从具体类中抽出抽象方法
在将实例作为参数传递至类中,或者在类的字段中保存实例时,不使用具体类型,而是使用抽象类型和接口
Observer的顺序不应该影响到通知,并且需要避免循环通知的问题
Memento模式
用于实现撤销,重做,历史记录,快照等功能
Memento的宽接口用于获取保护信息
Memento的窄接口用于获取公共信息
Caretaker只能调用Memento的窄接口,即将其当做黑盒
Originator可以调用Memento的宽接口,用于修改内部数据
在实现上,Originator必须为Memento的友元类,以调用protect属性的宽接口
State模式
以类表示状态,通过切换类来方便地切换状态,增加新的类就可以增加新的状态
不使用State模式时,需要使用条件语句判断当前状态,状态越多,分支越多
状态的迁移可以由各个ConstractState来管理,也可以由Context来管理,取决于使用者想要的依赖关系
易于增加新的状态,难于增加依赖状态的处理
用类来表现
Command模式
Interpreter模式
0 条评论
下一页