设计模式(Design Pattern)是一套被反复使用、多数知晓、分类编目、代码设计经验的总结。
使用设计模式可提高代码的简洁、易读和可维护性,让代码易于被他人理解且保证软件的可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式这个术语是由 Erich Gamma 等人在 20 世纪 90 年代从建筑设计领域引入的,它是对软件设计领域普遍存在的各种问题所提出的解决方案,不涉及完成应用程序的具体的类或对象。设计模式是前人实践经验的结晶,可以帮助我们优化程序设计。关于设计模式的著作,最早最著名的就是由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著的《Design Patterns: Elements of Reusable Object-Oriented Software》(中文名为《设计模式》一书)。这几位作者常被称为"四人组(Gang of Four,GoF)。书中共收录了23种设计模式,这些设计模式被分为三大类:创建型、结构型和行为型,分别包括内容如下:
创建型模式5个: 单例模式(Singleton)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、工厂模式(Factory)、原型模式(Prototype)。
结构型模式7个: 适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)。
行为型模式11个: 模版方法模式(Template Method)、命令模式(Command)、迭代器模式(Iterator)、观察者模式(Observer)、中介者模式(Mediator)、备忘录模式(Memento)、解释器模式(Interpreter)、状态模式(State)、策略模式(Strategy)、责任链模式(Chain of Responsibility)、访问者模式(Visitor)。
事实上,除了 GoF 的 23 个著名设计模式之外,还有很多别的设计模式,Wrapper 模式、DAO(Data Access Object)模式、MVC(Model-View-Control)模式等。设计模式的学习是一个艰苦漫长的过程,需要大量的实践、思考和总结,即便如此,我们首先要有这个学习的意识。