[设计模式] 23种设计模式总结
Posted cxc1357
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[设计模式] 23种设计模式总结相关的知识,希望对你有一定的参考价值。
创建型:在创建对象的同时隐藏创建逻辑
工厂
- 目的:生成跨平台对话框
- 中间层:将创建过程抽象为工厂类
- 接口化:将对话框动作抽象为接口
- 对象化:将具体平台对话框抽象为对象
构建器
- 目的:生成肯德基套餐
- 中间层:将构建步骤抽象为中间类,包含接口变量
- 接口化:将构建动作抽象为接口
- 对象化:将具体构建过程抽象为对象
原型
- 目的:生成重复对象
- 中间层:将构建步骤抽象为中间类,包含接口变量
- 接口化:将克隆动作抽象为接口
- 对象化:将具体构建过程抽象为对象
结构型:关注类和对象的组合
桥接
- 目的:画出不同颜色的圆
- 中间层:将控制步骤抽象为中间类,包含接口变量
- 接口化:将画的动作抽象为接口,连接使用者和具体颜色类
- 对象化:将不同颜色的圆抽象为对象
适配器
- 目的:方钉适配圆孔
- 中间层:将方钉适配器抽象为中间类,继承圆钉类,同时包含方钉类变量(动作一样,即可看作一类)
组合
- 目的:树形菜单,文件夹管理
- 接口化:将所有对象的动作抽象为接口
- 递归结构:一个类中包含自身对象的容器
装饰
- 目的:为画增加画框
- 接口化:原对象和装饰类实现相同的接口,在装饰类中添加功能后多态调用
外观
- 目的:通过接线员与仓库、支付、供货商等所有环节沟通
- 中间层:在客户端和具体类间增加中间类,通过中间类调用具体类
享元
- 目的:共用对象中相同的部分,以节省内存
- 分拆:将对象状态分为内部和外部
- 中间层:用工厂类控制对象的创建
代理
- 目的:为对象提供代理以控制该对象的访问,以减少加载时的内存占用
- 接口化:代理类和实际类都实现相同的接口
- 中间层:代理类中包含实际类对象,从而可以调用实际类的方法
行为型:关注对象间的通信
责任链
- 目的:逐级传递指令,并在中途加以控制
- 抽象化:客户端与抽象命令交互,具体命令扩展抽象命令,并在自己的类中添加控制
命令
- 目的:在发送者和接收者之间传递命令,而不让其直接交互,以实现回滚
- 中间层:调用类作为中间层,确定那个对象执行哪个命令
- 接口化:实际命令实现命令接口
迭代器
- 目的:遍历集合元素,而不需要知道集合的底层表示
- 接口化:将集合和迭代器抽象为接口,由具体的集合和对应迭代器实现
- 内部类:容器包含迭代器
中介者
- 目的:用户将留言发到聊天室,聊天室显示所有人的留言
- 类通信:用户作为聊天室发送消息方法的参数,用户类中直接调用聊天室的方法(静态方法,不需实例化即可访问)
备忘录
- 目的:将系统恢复到用户操作前的状态
- 结构:备忘录类(状态、时间),记录者类(备忘录容器、原发器)[备份、撤销],原发器类[记录、恢复]
- 中间层:记录者作为客户端和原发器的中间层
观察者
- 目的:对象间的一对多关系,一个对象发生改变时,所有依赖它的对象都得到通知并被自动更新
- 结构:一个主体(观察者列表)[获取状态,订阅,更新状态,通知],多个观察者/订阅者(主体)[更新]
- 接口化:具体观察者实现抽象观察者类
状态
- 目的:对象行为随状态改变而改变
- 结构:上下文类 ( 状态 ) [ 获取状态 , 设置状态 ],状态接口 [ 行为 ( 上下文 ) ] ,具体状态类 [ 行为 ( 上下文 ) ]
- 对象化:把状态抽象为具体类,而不是用if-else
策略
- 目的:一个类的行为可在运行时更改
- 结构:上下文类 ( 策略 )[ 执行策略 ],策略接口 [ 行为 ],具体策略类 [ 行为 ]
- 对象化:把策略抽象为具体类,而不是用if-else
- 接口化:具体策略类重写策略接口的方法
模板
- 目的:子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
- 结构:模板类 [ 方法 ] ,具体类 [ 具体方法 ]
- 抽象化:将共用方法抽象到模板类中
访问者
- 目的:将数据结构(稳定)与数据操作(变化)分离,避免新增方法对已有对象的污染
- 结构:访问者[ 访问 ( 具体的被访问者 ) ],被访问者接口 [ 接受访问 ( 抽象的访问者 ) ] ,被访问者 [ 接受访问 ( 抽象的访问者 ) ]
- 接口化:将访问者、被访问者共同的动作分别抽象为接口
以上是关于[设计模式] 23种设计模式总结的主要内容,如果未能解决你的问题,请参考以下文章