【GOF】23中设计模式深析

news/2024/6/28 23:46:17

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

###对象创建

原型模式、工厂模式、抽象工厂模式、生成器、单例模式

###接口适配

适配器模式、桥接、外观模式、迭代器

###行为扩展

访问者模式、装饰模式、责任链模式

###算法封装

模板方法模式、策略模式、命令模式、

###性能与对象访问

享元模式、代理模式

###对象状态

备忘录模式

###设计模式尊求原则

http://www.uml.org.cn/sjms/201211023.asp
总原则:开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。
1、单一职责原则
不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,如若不然,就应该把类拆分。2、里氏替换原则(Liskov Substitution Principle)
里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科
历史替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。3、依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,具体内容:面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。5、迪米特法则(最少知道原则)(Demeter Principle)
就是说:一个类对自己依赖的类知道的越少越好。也就是说无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。
最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。6、合成复用原则(Composite Reuse Principle)
原则是尽量首先使用合成/聚合的方式,而不是使用继承。为啥遵守原则?
模块架构或代码在遵守原则的情况下,更清晰,更精简,更易于扩展。而模式就是遵守这些原则的情况下总结出来的,理解了原则,模式的用意就清楚了。

###设计模式间的关系

设计模式间关系

设计模式

###实现参考

https://github.com/knight2010/23GOF

转载于:https://my.oschina.net/kshopping/blog/706809


http://lihuaxi.xjx100.cn/news/242844.html

相关文章

Java框架学习顺序是哪些

java编程是互联网行业不可或缺的一门编程语言,也是世界第一编程语言,Spring、Struts、Hibernate是经典中的经典,最常用的框架类型。下面小编就为大家详细的介绍一下Java框架学习顺序是哪些? Java框架学习顺序是哪些?详细步骤具体如下&#…

AC日记——小书童——刷题大军 洛谷 P1926

题目背景 数学是火,点亮物理的灯;物理是灯,照亮化学的路;化学是路,通向生物的坑;生物是坑,埋葬学理的人。 文言是火,点亮历史宫灯;历史是灯,照亮社会之路&…

用Git上传删除本地项目到gitlab---图文解析

Git简介 Git是目前世界上最先进的分布式版本控制系统 故事起源:如果你用Microsoft Word写过长篇大论,那你一定有这样的经历: 想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……

哪些人适合学习软件测试

软件测试相对于其他编程语言来说,它的入门门槛是相对比较低的,想要从事IT互联网行业可以选择学习软件测试,那么都有哪些人适合学习软件测试呢?来看看下面的详细介绍吧。 哪些人适合学习软件测试?就在软件测试培训行业观察来看,小…

windows版Cacti-0.8.8h一键安装

windows环境中的cacti,需要提前安装.net4.0及以上,使用IIS的画请提前安装(默认安装即可),此软件自带apache,安装时可以选择。IIS请打开支持CGI,打开snmp ,下载地址:http:…

TCP和UDP传输特点

1.1TCP传输特点: 端到端通信:客户应用程序在一端,服务器在另一端建立可靠连接:建立连接时会测试网络的连通性可靠交付:建立连接后会发送数据是可靠的,除非因为故障而不能可靠交付,发送方会得到…

怎么让BarTender对象等间距分布

在BarTender 2016设计条码标签时,我们需要让对象分布尽可能整齐美观,例如实现对象的对齐,对象等间距分布等。这些在作为世界上最好且最受信任的条码打印软件BarTender中,都是可以很轻松的实现的。下面,小编就给大家讲讲…

mac os x常用快捷键及用法

最近在研究mac os x系统,开始入手,很不习惯,和windows差别很大,毕竟unix内核。使用中总结了一些使用快捷键(默认),持续更新,欢迎大家补充。1.撤销:commandz 保存&#x…