设计模式(design pattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由艾瑞克·伽马(Erich Gamma)等人从建筑设计领域引入到计算机科学中来的。
设计模式是用来提高代码可重用性、可维护性、可读性、稳健性以及安全性的解决方案。(设计模式更多的是一种设计思想、不同的人有不同的理解实现,并非固定不变)
设计模式的本质是面向对象设计原则的实际运用,是对类的封装、继承和多态以及类的关联关系和组合关系的充分理解。
设计模式这个术语最初用于建筑领域的设计,1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。
1979 年他的另一部经典著作《建筑的永恒之道》(The Timeless Way of Building)进一步强化了设计模式的思想,为后来的建筑设计指明了方向。
1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书,在本教程中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的“四人组”(Gang of Four,GoF)匿名著称。
创建型模式(Creational patterns)
对象创建机制,增加现有代码的灵活性和重用。 单例、工厂方法、抽象工厂、原型、建造者
结构型模式(Structural patterns)
将对象和类组装成更大的结构,同时保持结构的灵活性和高效性。 适配器、桥接、装饰、组合、外观、享元、代理
行为型模式(Behavioral patterns) 描述程序运行中对象之间的协作。 模板方法、命令、访问者、迭代器、观察者、中介者
1.开闭原则 (Open-Closed Principle, OCP)
开闭原则是面向对象程序设计的目标最终,软件模块应该对扩展开放,对修改关闭。在程序需要进行新增功能的时候,不去修改原有的代码,而是新增代码。
2.单一职责原则 (Single Responsibility Principle, SRP)
一个类只负责一个功能领域中的相应职责。降低类复杂性降低,提高代码可读性,提高可维护性。
单一职责也适用于方法,抽象程度越高被复用可能性就约大。
3.里氏代换原则 (Liskov Substitution Principle, LSP)
子类可以扩展父类的功能,但不能改变父类原有的功能。
4.依赖倒转原则 (Dependence Inversion Principle, DIP)
面向接口编程,而不是针对实现编程。高层模块不应该依赖低层模块,二者都应该依赖其抽象。
5.接口隔离原则 (Interface Segregation Principle, ISP)
使用多个隔离的接口,比使用单个接口要好,将庞大的接口拆分成更小的接口。
6.合成复用原则 (Composite Reuse Principle, CRP)
尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
7.迪米特法则 (Law of Demeter, LoD)
最少知道原则,一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
