每个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。----Christopher Alexander
良好的软件的基本特征是 高内聚、松耦合,使得它更易于维护、扩展和复用。
在20世纪90年代,Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides四人出了本名为《设计模式:可复用面向对象软件设计基础》经典著作,称“GoF四人组”,其描述23种经典模式被称为“GoF设计模式”。
设计模式就是解决某个特定的问题的特定方法。需要对面向对象设计中建立的类型进行更进一步的抽象。
好的程序员需要了解尽可能多的模式,不断学习新的模式,更重要的是识别反复出现的问题并通过模式来解决问题
还有模式的最高境界就是忘记模式。说到底,学习模式就是学一种理念、一种审美观、一种思考方式。
面向对象指使用离散的对象来构建软件系统,而设计模式利用了对象的继承、组合和委托,在比OOP更高层次考虑问题,尤其是使用委托来对任何不稳定或不确定的方法,如:状态、对象的创建、应用平台等,进行封装,从而保证了源代码的重用和设计的问题,因此设计模式可以理解为OOP中虚函数、多态函数概念的延伸:OOP中的虚函数和多态实现的是方法、对象行为上的多态,而设计模式则对创建、结构和高层次的行为进行了多态。
在哪里应用设计模式的一个重要指标就是:看哪里有变化点,设计模式是建立在对系统变化点的基础上进行的,哪里有变化点,哪里就应用设计模式。
模式类别 | 模式名称 | 模式说明 |
---|---|---|
创建型模式(Creational Pattern) | 抽象工厂模式(Abstract Factory Pattern) | 提供一个创建一系列或相互依赖对象的接口,而无需指定它们具体的类 |
创建型模式(Creational Pattern) | 建造者模式(Builder Pattern) | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 |
创建型模式(Creational Pattern) | 工厂方法模式(Factory Method Pattern) | 定义一个用于创建对象的接口,但是让子类决定将哪一类实例化 |
创建型模式(Creational Pattern) | 原型模式(Prototype Pattern) | 使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象 |
创建型模式(Creational Pattern) | 单例模式(Singleton Pattern) | 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例 |
结构型模式(Creational Pattern) | 适配器模式(Adapter Pattern) | 将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作 |
结构型模式(Creational Pattern) | 桥接模式(Bridge Pattern) | 将抽象部分与它的实现部分解耦,使得两者都能够独立变化 |
结构型模式(Creational Pattern) | 组合模式(Composite Pattern) | 组合多个对象形成树形结构,以表示具有部分-整体关系的层次结构,组合模式让客户端可以统一对待单个对象和组合对象 |
结构型模式(Creational Pattern) | 装饰模式(Decoratot Pattern) | 动态地给一个对象增加一些额外的职责,就扩展功能而言,装饰模式提供一种比使用子类更灵活的替代方案 |
结构型模式(Creational Pattern) | 外观模式(Facade Pattern) | 为子系统中一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 |
结构型模式(Creational Pattern) | 代理模式(Proxy Pattern) | 给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象 |
结构型模式(Creational Pattern) | 享元模式(Flyweight Pattern) | 运用共享技术有效地支持大量细粒度对象的复用 |
参考《C#设计模式》刘伟 胡志刚。