GOF的C++软件设计模式的分类和模式名称
“GOF” 指的是 “Gang of Four”,即“四人帮”,他们是指 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides。这四位作者在其著作《Design Patterns: Elements of Reusable Object-Oriented Software》中定义了23种设计模式,这些模式被广泛应用于软件开发中。根据他们解决问题的性质,设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。
1. 创建型模式(Creational Patterns)
创建型模式主要关注如何创建对象,目的是通过使用不同的方式来创建对象,从而增强程序的灵活性和可复用性。
- 单例模式(Singleton):确保一个类仅有一个实例,并提供全局访问点。
- 工厂方法模式(Factory Method):定义一个创建对象的接口,但由子类决定要实例化的类。
- 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
- 建造者模式(Builder):使用多个简单的对象一步步构建成一个复杂的对象。
- 原型模式(Prototype):通过复制已有的实例来创建新的对象,而不是通过类构造。
2. 结构型模式(Structural Patterns)
结构型模式关注类或对象的组合,旨在通过组合现有类或对象来形成更大的结构。
- 适配器模式(Adapter):将一个类的接口转换成客户希望的另一个接口。
- 桥接模式(Bridge):将抽象部分与其实现部分分离,使它们可以独立变化。
- 组合模式(Composite):将对象组合成树形结构以表示部分-整体的层次结构。
- 装饰模式(Decorator):动态地给对象添加职责或行为。
- 外观模式(Facade):为子系统中的一组接口提供一个统一的高层接口。
- 享元模式(Flyweight):通过共享对象来减少内存占用,适用于大量相似对象的场景。
- 代理模式(Proxy):通过代理对象控制对某个对象的访问,通常用于控制对象的访问或增加额外的功能。
3. 行为型模式(Behavioral Patterns)
行为型模式主要关注对象之间的交互,提供了对象之间的责任分配和通信方式。
- 责任链模式(Chain of Responsibility):将请求的发送者和接收者解耦,让多个对象都有机会处理请求。
- 命令模式(Command):将请求封装为一个对象,从而使你可以对请求排队或记录请求日志,以及支持可撤销的操作。
- 解释器模式(Interpreter):提供一种语言的文法的解释器,主要用于构建语言解析器。
- 迭代器模式(Iterator):提供一种方法访问一个集合对象中的各个元素,而不暴露该对象的内部表示。
- 中介者模式(Mediator):用一个中介对象封装一系列的对象交互,促进松耦合。
- 备忘录模式(Memento):在不破坏封装的情况下,捕获对象的内部状态,并在适当时刻恢复。
- 观察者模式(Observer):定义对象之间的一对多依赖关系,以便当一个对象改变状态时,所有依赖于它的对象都得到通知并自动更新。
- 状态模式(State):允许对象在内部状态改变时改变它的行为,使状态的改变看起来像是改变了对象。
- 策略模式(Strategy):定义一系列算法,并将每一个算法封装起来,使它们可以互换。
- 模板方法模式(Template Method):在一个方法中定义一个算法的框架,而将一些步骤延迟到子类中。
- 访问者模式(Visitor):表示一个作用于某种数据结构中的各元素的操作,能够在不修改数据结构的前提下定义新的操作。
关注的问题
GOF设计模式着重解决以下问题:
- 创建问题:如何有效创建对象与控制对象的生命周期(如单例或工厂模式)。
- 结构问题:如何更高效地组合不同的类和对象以形成复杂的结构(如组合或适配器模式)。
- 行为问题:如何高效地处理对象之间的交互和责任分配(如观察者、命令和策略模式)。
设计模式的使用不仅可以提升代码的可读性和可维护性,还能提高代码的复用性和灵活性。理解这些模式及其应用场景将有助于设计出更高质量的软件系统。