码迷,mamicode.com
首页 > 其他好文 > 详细

[设计模式] 23种设计模式总结

时间:2020-06-13 00:16:36      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:命令   传递   外观   模板类   树形菜单   结构型   创建   重定义   实例   

创建型:在创建对象的同时隐藏创建逻辑

工厂

  • 目的:生成跨平台对话框
  • 中间层:将创建过程抽象为工厂类
  • 接口化:将对话框动作抽象为接口
  • 对象化:将具体平台对话框抽象为对象

构建器

  • 目的:生成肯德基套餐
  • 中间层:将构建步骤抽象为中间类,包含接口变量
  • 接口化:将构建动作抽象为接口
  • 对象化:将具体构建过程抽象为对象

原型

  • 目的:生成重复对象
  • 中间层:将构建步骤抽象为中间类,包含接口变量
  • 接口化:将克隆动作抽象为接口
  • 对象化:将具体构建过程抽象为对象

结构型:关注类和对象的组合

桥接

  • 目的:画出不同颜色的圆
  • 中间层:将控制步骤抽象为中间类,包含接口变量
  • 接口化:将画的动作抽象为接口,连接使用者和具体颜色类
  • 对象化:将不同颜色的圆抽象为对象

适配器

  • 目的:方钉适配圆孔
  • 中间层:将方钉适配器抽象为中间类,继承圆钉类,同时包含方钉类变量(动作一样,即可看作一类)

组合

  • 目的:树形菜单,文件夹管理
  • 接口化:将所有对象的动作抽象为接口
  • 递归结构:一个类中包含自身对象的容器

装饰

  • 目的:为画增加画框
  • 接口化:原对象和装饰类实现相同的接口,在装饰类中添加功能后多态调用

外观

  • 目的:通过接线员与仓库、支付、供货商等所有环节沟通
  • 中间层:在客户端和具体类间增加中间类,通过中间类调用具体类

享元

  • 目的:共用对象中相同的部分,以节省内存
  • 分拆:将对象状态分为内部和外部
  • 中间层:用工厂类控制对象的创建

代理

  • 目的:为对象提供代理以控制该对象的访问,以减少加载时的内存占用
  • 接口化:代理类和实际类都实现相同的接口
  • 中间层:代理类中包含实际类对象,从而可以调用实际类的方法

行为型:关注对象间的通信

责任链

  • 目的:逐级传递指令,并在中途加以控制
  • 抽象化:客户端与抽象命令交互,具体命令扩展抽象命令,并在自己的类中添加控制

命令

  • 目的:在发送者和接收者之间传递命令,而不让其直接交互,以实现回滚
  • 中间层:调用类作为中间层,确定那个对象执行哪个命令
  • 接口化:实际命令实现命令接口

迭代器

  • 目的:遍历集合元素,而不需要知道集合的底层表示
  • 接口化:将集合和迭代器抽象为接口,由具体的集合和对应迭代器实现
  • 内部类:容器包含迭代器

中介者

  • 目的:用户将留言发到聊天室,聊天室显示所有人的留言
  • 类通信:用户作为聊天室发送消息方法的参数,用户类中直接调用聊天室的方法(静态方法,不需实例化即可访问)

备忘录

  • 目的:将系统恢复到用户操作前的状态
  • 结构:备忘录类(状态、时间),记录者类(备忘录容器、原发器)[备份、撤销],原发器类[记录、恢复]
  • 中间层:记录者作为客户端和原发器的中间层

观察者

  • 目的:对象间的一对多关系,一个对象发生改变时,所有依赖它的对象都得到通知并被自动更新
  • 结构:一个主体(观察者列表)[获取状态,订阅,更新状态,通知],多个观察者/订阅者(主体)[更新]
  • 接口化:具体观察者实现抽象观察者类

状态

  • 目的:对象行为随状态改变而改变
  • 结构:上下文类 ( 状态 ) [ 获取状态 , 设置状态 ],状态接口 [ 行为 ( 上下文 ) ] ,具体状态类 [ 行为 ( 上下文 ) ]
  • 对象化:把状态抽象为具体类,而不是用if-else

策略

  • 目的:一个类的行为可在运行时更改
  • 结构:上下文类 ( 策略 )[ 执行策略 ],策略接口 [ 行为 ],具体策略类 [ 行为 ] 
  • 对象化:把策略抽象为具体类,而不是用if-else
  • 接口化:具体策略类重写策略接口的方法

模板

  • 目的:子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
  • 结构:模板类 [ 方法 ] ,具体类 [ 具体方法 ] 
  • 抽象化:将共用方法抽象到模板类中

访问者

  • 目的:将数据结构(稳定)与数据操作(变化)分离,避免新增方法对已有对象的污染
  • 结构:访问者[ 访问 ( 具体的被访问者 ) ],被访问者接口 [ 接受访问 ( 抽象的访问者 ) ] ,被访问者 [ 接受访问 ( 抽象的访问者 ) ]
  • 接口化:将访问者、被访问者共同的动作分别抽象为接口

[设计模式] 23种设计模式总结

标签:命令   传递   外观   模板类   树形菜单   结构型   创建   重定义   实例   

原文地址:https://www.cnblogs.com/cxc1357/p/13094415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!