GOF23设计模式总结
创建型模式
单例模式、工厂模式、建造者模式、原型模式。
结构型模式
装饰模式、享元模式、桥接模式、组合模式、外观模式、代理模式、适配器模式。
行为型模式
模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、策略模式、状态模式、责任链模式、访问者模式。
创建型模式
关注对象的创建过程。
单例模式(Singleton)
保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。
工厂模式(Factory)
实例化对象,用工厂方法代替new操作。
将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
建造者模式(Builder)
具体的建造者类之间是相互独立的,容易扩展。
原型模式(Prototype)
扩展性好,由于写原型模式的时候使用了抽象原型类,在客户端进行编程的时候可以将具体的原型类通过配置进行读取。
结构型模式
关注对象和类的组织。
适配器(Adapter)模式
将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
代理模式(Proxy pattern)
通过代理,控制对对象的访问。
桥接模式(bridge)
桥接模式可以取代多层继承的方案。多层继承违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
桥接模式极大提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。
组合模式(composite)
抽象构件(Component)角色:定义了叶子和容器构件的共同点。
叶子(Leaf)构件角色:无子节点。
容器(Composite)构件角色:有容器特征,可以包含子节点。
装饰模式(decorator)
动态的为一个对象增加新功能。
装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
外观模式(Facade)
为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用。
享元模式(FlyWeight)
享元模式以共享的方式高效地支持大量细粒度对象的重用。
享元对象能做到共享的关键是区分了内部状态和外部状态
·内部状态:可以共享,不会随环境变化而改变
·外部状态:不可以共享,会随环境变化而改变
行为型模式
关注系统中对象之间的相互交互研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。
责任链模式(Chain of Responsibility)
将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象.
迭代器模式(iterator)
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
中介者模式(Mediator)
定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
命令模式(command)
将请求封装为一个对象,从而使我们可用不同的请求对客户端进行参数化。
解释器模式(Interpreter)
用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计。
访问者模式(Visitor)
表示一个作用于对象结构中的各元素的操作,它使我们可以在不改变元素的类的前提下定义作用于这些元素的新操作。
策略模式(Strategy)
分离算法,选择实现。
模板方法模式(template method)
定义一个操作中的算法骨架,将某些步骤延迟到子类中实现。
状态模式(state)
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。
观察者模式(Observer)
主要用于1:N的通知。当一个对象的状态变化时,他需要及时告知一系列对象,令他们做出响应。
备忘录模式(memento)
保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。