设计模式解密(23) - 总结篇

索引目录&&传送门:

总体来说设计模式分为三大类:

创建型模式(5种):单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式

结构型模式(7种):适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式

行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

总结结构图

这里可能看不清楚:大图链接 (提示:放大查看)

1、设计模式的六大原则

1、开闭原则(Open Close Principle)

  开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则(Liskov Substitution Principle)

  里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则(Dependence Inversion Principle)

  这个原则是开闭原则的基础,具体内容:针对对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

  这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

5、迪米特法则,又称最少知道原则(Demeter Principle)

  最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

  合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

2、创建型模式(5种)

  单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  工厂方法(Factory Method):定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

  抽象工厂(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

  建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

3、结构型模式 (7种)

  适配器模式(Adapter):适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

  装饰模式(Decrator):装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

  代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问 ;

  外观模式(Facade):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

  桥接模式(Bridge):将抽象部分与实现部分分离,使它们都可以独立的变化。

  组合模式(Composite):允许你将对象组合成树形结构来表现"整体-部分"层次结构。 组合能让客户以一致的方法处理个别对象以及组合对象。

  享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。

4、行为型模式(11种)

  策略模式(Strategy):定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。

  模板方法(Template Method):一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。

  观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

  迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示;

  职责链模式(Chain of Responsibility):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

  命令模式(Command):将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作;

  备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态。

  状态模式(State):允许对象在内部状态改变时改变它的行为, 对象看起来好像修改了它的类。

  访问者模式(Visitor):表示一个作用于其对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。

       中介者模式(Mediator):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用。从而使其耦合松散,而且可以独立地改变它们之间的交互。

  解释器模式(Interpreter):给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。

5、总结篇

 目的:为了代码的复用、容易理解和保证代码的可靠性。最终要达成的效果是:可扩展性、可修改性、可替换性。

 设计模式四大阶段:

  1、没学之前,什么是设计模式,老听别人说设计模式,感觉好高大上,那它到底是什么鬼。这时我们设计的代码复用性很差、难以维护。

  2、学了几个模式后,感觉很简单,于是到处想着要用自己学过的模式,这样就会造成滥用。最后感觉还不如不用。

  3、学完全部模式时,感觉很多模式太相似了,无法很清晰的知道各模式之间的区别、联系,这时一脸懵逼,脑子一团乱麻。在使用时,分不清要使用那种模式。

  4、模式已熟记于心,已忘其形,深知其意,达到无剑胜有剑的境界,恭喜你,万剑归宗已练成!!!

 PS:

  在学习设计模式时,一定要理解模式的适用性。做到了解它的优点、弊端!!!

  设计模式非一日可成,需要我们长期的实践,多看框架的源码,多研究,会对你有很大的帮助!!!

PS:源码地址   https://github.com/JsonShare/DesignPattern/tree/master

PS:原文地址  http://www.cnblogs.com/JsonShare/p/7110200.html

转载于:https://www.cnblogs.com/excellencesy/p/8661619.html

[转载]设计模式解密(23) - 总结篇相关推荐

  1. Java设计模式之工厂模式篇 (转)

    Java设计模式之工厂模式篇 (转)[@more@]Java设计模式之工厂模式篇 作者:冯睿  本文选自:赛迪网 2003年03月07日 .NET.com.cn/servlets/ad?Pool=te ...

  2. 026 [转载]冰血大哥的一篇学习计划

    [转载]冰血大哥的一篇学习计划 转载自:a1pass.blog.163.com 2007-08-06 20:27:21| 分类: 网文九尾狐--随 | 标签:技术随笔 随笔 题记:变态计划一篇,大家可 ...

  3. 学了23种设计模式,这一篇就够了

    设计模式 1.模板方法模式 2.代理模式 3.装饰器模式 4.策略模式 5.状态模式 6.责任链模式 7.适配器模式 8.观察者模式 9.外观模式 11.组合模式 12.工厂模式 13.抽象工厂模式 ...

  4. 用 Delphi 学设计模式 之 简单工厂篇- -

    本文在 大富翁发表已将近一个月,作为理论性比较强的内容,反映比较热烈并被转载和收藏,由于我的 Blog 已开通,现将全文在 Blog 中重新发布并删除大富翁上的 原贴 ,转载请注明出处.下面是正文: ...

  5. 软件设计模式(23中设计模式)

    目录 1. 软件架构设计模式 2. 设计模式特点 3. 设计模式分类 3.1 面向对象设计原则 3.2 5种创建型模式 3.3 7种结构性模式 3.4 11种行为性模式 参考 1. 软件架构设计模式 ...

  6. 设计模式01-入门介绍篇

    设计模式简介 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了重用代码.让代码更容易被他人理解. ...

  7. 设计模式 之美 --- 初篇

    接下来的一段时间将按照如下体系导图,对23种设计模式 按照自己的理解一一总结,为后续工作中持续灵活使用做好积累. 学习应用 设计模式的过程有如下好处 提高复杂代码的设计开发能力 让阅读源码 和 学习框 ...

  8. 实战之网马解密之shellcode篇

    今天上卡卡社区发现里面发了个网马解密的链接,呵呵 顺便试试看能解出来不.呵呵.  相信各位已经对网马有点了解了吧.一般网马都是加密了的.关于什么是网马以及怎么防止网马也不是本文的重点.本文是实战she ...

  9. [转载] 杜拉拉升职记——23 “You deserve it”的两种解释

    来源:李可. 杜拉拉升职记(第三版). 西安: 陕西师范大学出版社, 2010, 5. 23 "You deserve it"的两种解释 拉拉在广州,李斯特打电话和她说了升职变动的 ...

最新文章

  1. python设计模式(三):原型模式—快速实例化类的一种途径
  2. html 文本框 自动拼接,HTML 中table的结构以及拼接
  3. 实现DRBD的简单配置
  4. 如何在 Laravel 中 “规范” 的开发验证码发送功能
  5. 计算机在工业工程中的应用,在工业工程中信息技术的应用原稿(全文完整版)...
  6. C++中读写文件demo
  7. Unity3D学习 ④ Unity导入商店资源,实现基本的奔跑、攻击动作切换与交互
  8. HTTP 协议中的长连接和短连接
  9. 六月我在工作中蜕变,勤奋小人打架终于赢了
  10. POJ 3345 Bribing FIPA 树上背包
  11. 如何用 Kaldi 训练一个 DNN 声学模型
  12. 产品经理告诉你什么是PMF?什么是MVP?
  13. [开心IT面试题] 关于50个人50条狗有几条病狗的推算
  14. 由圆上三点确定圆心和半径(附PythonMatlab程序)
  15. Windows Service 介绍
  16. FPGA基础入门【12】开发板USB鼠标控制
  17. 正则表达式的由来(Wikipedia和百度整合记录)
  18. AngularJs 总结
  19. 关于快捷支付,你需要了解的
  20. MySQL与数据仓库如何进行数据交互?今晚揭晓~

热门文章

  1. NLP 《隐式马尔科夫链》
  2. 计算机启动硬盘响,电脑开机时硬盘响个不停是什么原因?原因分析与解决方法介绍...
  3. 一张图教你如何选择机器学习算法
  4. leetcode —— 面试题68 - I. 二叉搜索树的最近公共祖先
  5. 基于物品的相似度还是基于用户的相似度
  6. 循环序列模型 —— 1.3循环神经网络
  7. GOF之行为型模式Ⅰ(重点)
  8. STM32 - 定时器高级应用说明 - 多触波的实现 (N-pulse waveform generation using timer synchronization)- 02
  9. redis和sqlserver数据同步_SQLServer数据库之redis数据库的数据导入到SQLServer数据库中...
  10. 海岸鸿蒙慕建洲,用于校准液体自动颗粒计数器的标准物质及其制备方法.pdf