我们先来解答这个问题。Design Pattern这个概念是什么时候开始提出的!
“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种经典设计模式。在可复用面向对象软件的发展过程中,新的设计模式仍在不断总结提出。”
解决了上面的问题后,就要问为什么GoF会写Design Pattern这本书。一个东西从无到有,这中间是一种什么样的力量孕育出来这个东西。是思考的力量。
“Je pense, donc je suis”
谈到思考,不得不谈到哲学家,哲学家是干什么的,他们基本不从事生产劳动,他们主要就负责思考。对一种普遍本质的思考。我们来看下百度百科对哲学的定义。
“哲学是关于世界的本质、发展的根本规律、人的思维与存在的根本关系的理论体系”
在马克思主义哲学体系中有三大规律、五对范畴以及三大基本观点等概念来指导人类认识和理解我们的世界。
“三大规律:① 对立统一规律、②量变质变规律,③否定之否定规律;五对范畴:①内容和形式、②现象和本质、③原因和结果、④可能性和现实、⑤偶然性和必然性;三大基本观点:①联系的观点、②发展的观点、③一分为二的观点”
那么是否也有类似的指导原则来刻画软件世界。基于此有哲思能力的大师开始思考和总结这件事,首先他们要抽象出一个软件世界及其规则,这个过程也是把软件世界和客观世界进行类比的过程,抽象出规则指导设计和开发,在1994年GOF四人将相关知识整理成书。归根到底大师们提出的这些指导思想,都是在尽量避免以下情况的发生。
- Rigidity – It is hard to change because every change affects too many other parts of the system.
- Fragility- When you make a change, unexpected parts of the system break.
- Immobility – It is hard to reuse in another application because it cannot be disentangled from the current application.
并在这个基础上提出了5个指导原则,可以通过SOLID这个单词来记忆这5个规则。
- Single Responsibility Principle:一个类只做一件事,一个类应该只有一个引起它修改的原因。
- Open Close Principle:一个软件实体如类、模块和函数应该对修改封闭,对扩展开放。
- Liskov’s Substitution Principle:子类应该可以完全替换父类。也就是说在使用继承时,只扩展新功能,而不要破坏父类原有的功能。
- Interface Segregation Principle:客户端不应依赖它不需要的接口。如果一个接口在实现时,部分方法由于冗余被客户端空实现,则应该将接口拆分,让实现类只需依赖自己需要的接口方法。
- Dependency Inversion Principle:细节应该依赖于抽象,抽象不应依赖于细节。把抽象层放在程序设计的高层,并保持稳定,程序的细节变化由低层的实现层来完成。
进而GoF提出了23种经典的设计模式,这些设计模式就是指导设计者如何规划软件世界里面的对象之间的关系,运用这些模式的目的就是为了达到理想中所设计的那个软件世界。这GoF所提出的23种设计模式被分为了三大类:创建模式、结构模式、行为模式。
创建模式
创建模式简单的理解就是将用new运算符创建对象的操作进行了抽象和封装,解决了一些直接用new创建对象时一些缺陷。
1.工厂方法模式(Factory Method Pattern)2.抽象工厂模式(Abstract Factory Pattern)3.单例模式(Singleton Pattern)4.建造者模式(Builder Pattern)5.原型模式(Prototype Pattern)
1.工厂方法模式 |
|
2.抽象工厂模式 | |
3.单例模式 | |
4.建造者模式 | |
5.原型模式 |
结构模式
1.适配器模式(Adapter Pattern)2.桥接模式(Bridge Pattern)3.组合模式(Composite Pattern)4.装饰器模式(Decorator Pattern)5.外观模式(Facade Pattern)6.享元模式(Flyweight Pattern)7.代理模式(Proxy Pattern)
行为模式
1.责任链模式(Chain of Responsibility Pattern)2.命令模式(Command Pattern)3.解释器模式(Interpreter Pattern)4.迭代器模式(Iterator Pattern)5.中介者模式(Mediator Pattern)6.忘录模式(Memento Pattern)7.察者模式(Observer Pattern)8.状态模式(State Pattern)9.策略模式(Strategy Pattern)10.模板模式(Template Pattern)11.访问者模式(Visitor Pattern)
参考图书
《Design Patterns: Elements of Reusable Object-Oriented Software》
Learn SOLID Principles with CLEAN CODE Examples
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!