前言
一、简介
二、设计模式的类型
三、23种设计模式简介
四、设计模式七大原则
五、常用设计模式
六、源码地址
七、参考文档
八、内容推荐
1、设计模式来源?
答:设计模式来自于建筑领域,作为软件工程的一个分支。1995年由GOF收集整理了23种设计模式并出版了《Design Patterns: Elements of Reusable Object-Oriented Software》一书。
2、什么是设计模式?
答:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
3、为什么要使用设计模式(目的)?
答:为了代码可重用性、增加可维护性,让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化。
4、怎么实现代码可重用性?
答:遵循设计模式七大原则(单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则、合成/聚合复用原则)。
GoF(“四人组”,又称Gang of Four,即Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人)的《设计模式》,原名《Design Patterns: Elements of Reusable Object-Oriented Software》1995年出版,出版社:Addison Wesly Longman.Inc,第一次将设计模式提升到理论高度,并将之规范化。该书提出了23种基本设计模式。时至今日,在可复用面向对象软件的发展过程中,新的设计模式仍然不断出现。
设计模式是软件开发人员在软件开发过程中面临一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
好了,介绍完了。真正的好戏要开始了,是不是特别激动...
23种设计模式大体上分为三大类:
- 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。
- 结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。
- 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
大家可以看下这个表,是从菜鸟教程上获取的,多了两种模式(过滤器模式、空对象模式)不属于GOF23种设计模式。
按字典序排列简介如下:
之前看了许多博客与文档大部分都是在写六大原则不是少了单一职责原则就是少了合成/聚合复用原则。
其实许多书也都是在写六大原则不过我感觉还是少了一种,也有许多博客详细描述了七大原则。
这边就暂时定为七大原则,并简单介绍一下,详情还请找度娘。
(1)单一职责原则(SRP, Single Responsibility Principle)
定义:一个类应该有且只有一个变化的原因。
单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心。
优点:1、降低类的复杂度;2、提高类的可读性,提高系统的可维护性;3、降低变更引起的风险(降低对其他功能的影响)。
(2)开闭原则(Open Close Principle)
此原则是由Bertrand Meyer提出。
定义:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。
简而言之,尽量在不修改原代码的情况下进行扩展。
(3)里氏代换原则(Liskov Substitution Principle)
此原则是由Barbara Liskov提出,是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
定义:任何基类可以出现的地方,子类一定可以出现。只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。
(4)依赖倒转原则(Dependence Inversion Principle)
定义:针对接口编程,依赖于抽象而不依赖于具体。
依赖倒置原则包含三层含义:1、高层模块不应该依赖低层模块,两者都应该依赖其抽象;2、抽象不应该依赖细节;3、细节应该依赖抽象。
(5)接口隔离原则(Interface Segregation Principle)
定义:使用多个隔离的接口,比使用单个接口要好。可以降低类之间的耦合度。
简而言之:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
把一个复杂的接口拆分为独立的几个接口,客户端只需实现所需的接口就行。
(6)迪米特法则,又称最少知识原则(Least Knowledge Principle)
解决问题:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。需降低耦合采用迪米特法则
定义:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
(7)合成/聚合复用原则(Composite Reuse Principle)
合成/聚合复用原则经常又叫做合成复用原则
定义:在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。
它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。
单例、工厂、观察者、建造者下面简单的粗略的讲几种常用的设计模式、并举例说明。
需深入的我会附上链接供大家详细了解。
(1)单例模式
https://mp.csdn.net/postedit/83864571
(2)工厂模式
https://mp.csdn.net/postedit/83999073
(3)观察者模式
https://mp.csdn.net/postedit/84189465
(4)建造者模式
https://mp.csdn.net/postedit/84261641
先介绍这些常见模式,以后学习完再继续总结,后续将继续添加。
不过短期内可能不会有新的更新,主要原因是最近身体有点不适,你们懂得。
六、源码地址
https://github.com/DayorNight/DesignPattern
https://baike.baidu.com/item/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1212549?fr=aladdin
http://www.runoob.com/design-pattern/design-pattern-intro.html
简书:https://www.jianshu.com/p/c4c550b8d849
如果你觉得我写的不错或者对您有所帮助的话。不妨顶一个【微笑】,别忘了点赞、收藏、加关注哈!!
您的每个举动都是对我莫大的支持