博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式汇总
阅读量:5350 次
发布时间:2019-06-15

本文共 1916 字,大约阅读时间需要 6 分钟。

  笔者所发表的设计模式系列的随笔一共包含15篇,归纳总结了《Head First 设计模式》一书中的内容。在这些随笔中,尽量用简洁、概括的语言说明每个模式的概念、特点、用法,并配以图片(类图、流程图)给读者一种直观、具体的印象。希望大家能有所收获。

1、

2、 
3、 
4、 
5、 
6、 
7、 
8、 
9、 
10、 
11、 
12、 
13、 
14、 
15、 

 
模式汇总
  1. 装饰着: 包装一个对象,已提供新的行为
  2. 状态: 封装了基于状态的行为,以使 状态拥有者将行为委托到当前的状态
  3. 迭代器: 在对象的集合之间游走,而不暴露集合的实现
  4. 外观: 简化一群类的接口
  5. 策略: 封装可以互换的行为,并使用委托来决定要使用哪一个。
  6. 代理: 包装对象,以控制对此对象的访问。
  7. 工厂方法: 封装实例化的行为,工厂子类决定实例化哪个具体的类、采用什么策略实例化类
  8. 适配器: 封装对象并提供不同的接口
  9. 观察者: 让对象能够在状态改变时被通知
  10. 模板方法:父类定义算法的模板, 由子类决定如何实现算法中的某些步骤
  11. 组合: 客户用一致的方法处理对象的集合和单个对象
  12. 单件: 确保有且只有一个对象被创建
  13. 抽象工厂: 允许客户创建对象的家族,而无需指定它们的具体类
  14. 命令: 封装请求,成为对象
 
相似模式的比较
  • 装饰者: 包装另一个对象,并提供额外的行为
  • 外观: 包装许多对象,以简化它们的接口
  • 代理:包装另一个对象,并控制对它的访问
  • 适配器:包装另一个对象,并提供不同的接口
 
设计原则汇总
  1. “封装变化”。找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码放在一起。
  2. 针对接口编程,而不是针对实现编程。
  3. 对用组合,少用继承。
  4. 为交互对象之间的松耦合设计而努力。
  5. 对扩展开放,对修改关闭。
  6. 要依赖抽象,不要依赖具体类
  7. 最少知识原则:只和你的密友谈话
  8. 好莱坞原则:(高层组件对待底层组件的方式)别调用(打电话给)我们,我们会调用(打电话给)你。
  9. 单一责任,一个类应该只有一个引起变化的原因
 
模式的概念:
(看了这么多设计模式,我们再来回顾一下“模式”的概念,以及我们应该怎样来应用这些模式)
模式:是在某情景(context)下,针对某问题的某种解决方案。
  • 问题:包括目标和约束。
  • 解决方案:一个通用的设计,用来解决约束,达到目标。
 
1、对于每个问题,我们应该思考的内容:
2、结构决定功能。类的结构决定类的功能,汽车的结构决定了汽车的功能……
3、设计应“保持简单”。Keep It Simple。“将你的思想集中在设计本身,而不是在模式上。只有在真正需要时才使用模式”。
 
设计模式分类(1):
“不管是在什么时候,只要我们有一大堆东西,很自然的就会想要为它们分类,这可以帮助我们再更抽象的层次上思考这些问题”
1、创建型模式:涉及到将对象实例化。这类模式都提供一个方法,将客户从所需要实例化的对象中解耦。
      例如:Singleton、Factory Method、Abstract Factory、Builder、Prototype
2、行为型模式:都涉及到类和对象如何交互及分配职责。
     例如:Template Method、Iterator、Command、Observer、State、Strategy、Mediator、Visitor、Memento、Interpreter、Chain of Responsibility
3、结构型模式:描述类和对象如何被组合以建立新的结构或新的功能。
      例如:Decorator、Composite、Proxy、Facade、Adapter、Flyweight、Bridge
 
设计模式分类(2):
1、类模式:描述类之间的关系如何通过继承定义。类模式的关系是在编译时建立的。
     Template Method、Factory Method、Adapter、Interpreter
2、对象模式:描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态,更具有弹性。
     Composite、Decorator、Proxy、Strategy、Iterator、Command、Facade、Observer、State、Abstract Factory、Singleton、Visitor、Memento、Chain of Responsibility、Bridge、Flyweight、Prototype、Builder、Mediator
 
 
 

转载于:https://www.cnblogs.com/windlaughing/archive/2013/04/10/3013031.html

你可能感兴趣的文章
List<string> 去重复 并且出现次数最多的排前面
查看>>
js日志管理-log4javascript学习小结
查看>>
Android之布局androidmanifest.xml 资源清单 概述
查看>>
How to Find Research Problems
查看>>
Linux用户管理
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
图片的显示隐藏(两张图片,默认的时候显示第一张,点击的时候显示另一张)...
查看>>
Docker 安装MySQL5.7(三)
查看>>
python 模块 来了 (调包侠 修炼手册一)
查看>>
关于CSS的使用方式
查看>>
分析语句执行步骤并对排出耗时比较多的语句
查看>>
原生JS轮播-各种效果的极简实现
查看>>
计数器方法使用?
查看>>
带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
查看>>
sonar结合jenkins
查看>>
解决VS+QT无法生成moc文件的问题
查看>>
AngularJs练习Demo14自定义服务
查看>>
关于空想X
查看>>