设计模式(Design Patterns)是在面向对象软件设计过程中,针对特定问题的解决方案。比如,我想求一元二次方程的解,那么就可以套用一元二次方程解的公式。在这样一个特定问题(解一元二次方程)中,解的公式类似设计模式。
设计模式是为了解决特定问题的,最初GoF(Gang of Four/四人帮/四人组, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, 1994)总结了23个设计模式,现在又有简单工厂(Simple Factory)加入进来,也有J2EE设计模式这种书出版。所以设计模式不是固定的,或者说针对不同平台、不同语言、不同问题背景有不同的设计模式。
设计模式的应用背景是面向对象(Object-Oriented, OO)软件设计,OO中的基本概念是类和对象,OO产生的原因之一就是解决代码重用(Reusable)。这里代码重用的含义,有两个方面。
- 一个是某些地方需要这些代码实现的功能,就可以直接调用这些代码,而不用重新写实现这个功能的代码,即最少代码量;
- 第二个是这些代码的改动对调用者的没有影响或影响很小,即最少代码改动。
这两个方面都要求对这些代码进行封装,只留给一组接口给外部调用来用。封装即模块化,模块化在规模上有很多层次,如工具箱(Kit),框架(Framework),类(Class),函数(Function),代码块(Code Block)。
设计模式遵循的几个原则(参考这里):
- 单一职责原则(Single Responsibility Principle, SRP)。一个类仅负责一个职责。
- 里氏替换原则(Liskov Substitution Principle, LSP)。使用父类的地方可以用子类替换。
- 依赖倒置原则(Dependence Inversion Principle, DIP)。面向接口编程,依赖抽象。
- 接口隔离原则(Interface Segregation Principle, ISP)。接口最小。
- 迪米特法则(Law of Demeter)。对象对其他对象了解最少。
- 开闭原则(The Open-Closed Principle, OCP)。对扩展开放,对修改关闭。