设计模式-01 设计模式简介之分类
1.分类概述
今天梳理下设计模式的分类学说。按照GoF书籍 《Design Patterns - Elements of Reusable Object-Oriented Software》(中文译名:《设计模式 - 可复用的面向对象软件元素》) 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns),接下来我们分别看这三种类型有什么特点。
2. Creational Patterns
创建型模式(Creational Patterns)是设计模式中的一类,它们关注对象的创建过程。创建型模式提供了创建对象的不同方式,以便在不同情况下提高代码的灵活性、可重用性和可测试性。
创建型模式的共同特点包括:
- 封装创建逻辑:创建型模式将对象的创建逻辑封装在一个或多个类中,使创建过程与使用该对象的代码分离。
- 提高可重用性:创建型模式允许将创建逻辑重用在不同的上下文中,从而提高代码的可重用性。
- 解耦创建和使用:创建型模式将对象的创建和使用解耦,使这两项任务可以独立进行。
- 提供灵活性:创建型模式提供了创建对象的灵活性,允许在不同的情况下使用不同的创建策略。
创建型模式的常见类型包括:
- 工厂方法模式(Factory Method):定义一个创建对象的接口,但让子类决定实例化哪一个类。
- 抽象工厂模式(Abstract Factory):提供一个创建一系列相关对象的接口,而不指定它们的具体类。
- 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。
- 建造者模式(Builder):分离对象的创建和表示,以便使用相同的构建过程创建不同的表示。
- 原型模式(Prototype):通过复制一个现有的对象来创建新对象。
- 创建型模式广泛用于软件开发中,以提高代码的灵活性、可重用性、可测试性和可维护性。
3. Structural Patterns
结构型模式(Structural Patterns)是设计模式中的一类,它们关注类和对象之间的关系。结构型模式提供了一种组织和组合类和对象的方法,以便提高代码的可理解性、可维护性和可扩展性。
结构型模式的共同特点包括:
- 提高灵活性:结构型模式通过允许对象以不同的方式进行组合和连接来提高代码的灵活性。
- 解耦接口和实现:结构型模式将接口和实现解耦,使两项任务可以独立进行。
- 提高可扩展性:结构型模式允许在不影响现有代码的情况下轻松地扩展和修改系统。
- 提供复用性:结构型模式允许复用对象和类,从而提高代码的可复用性。
结构型模式的常见类型包括:
- 适配器模式(Adapter):将一个类的接口转换成另一个类所期待的接口。
- 桥接模式(Bridge):将抽象部分与实现部分解耦,使两部分可以独立变化。
- 组合模式(Composite):将对象组织成树形结构,以表示整体-部分层次结构。
- 装饰器模式(Decorator):动态地向对象添加新功能,而无需修改其原始类。
- 外观模式(Facade):提供了一个统一的接口来访问一个子系统中的多个接口。
- 享元模式(Flyweight):使用共享对象来支持大量细粒度对象。
- 代理模式(Proxy):为另一个对象提供一个替代或间接访问。
- 结构型模式广泛用于软件开发中,以提高代码的灵活性、可维护性、可扩展性和可理解性。
4. Behavioral Patterns
行为型模式(Behavioral Patterns)是设计模式中的一类,它们关注对象之间的通信和交互。行为型模式提供了一种组织和协调对象行为的方法,以便提高代码的可理解性、可维护性和可重用性。
行为型模式的共同特点包括:
- 封装行为:行为型模式通过将行为封装在单独的对象或类中来提高代码的可理解性和可维护性。
- 提高可重用性:行为型模式允许将行为重用在不同的上下文中,从而提高代码的可重用性。
- 解耦对象交互:行为型模式将对象之间的交互解耦,使它们可以独立变化。
- 提供灵活性:行为型模式提供了灵活性,允许在不同的情况下使用不同的行为策略。
行为型模式的常见类型包括:
- 策略模式(Strategy):定义一系列算法,并允许客户在运行时选择要使用的算法。
- 观察者模式(Observer):定义对象之间的一对多依赖关系,以便当一个对象的状态改变时,所有依赖对象都会得到通知并更新。
- 模板方法模式(Template Method):定义一个操作的算法骨架,允许子类重新定义某些步骤而不改变算法的结构。
- 命令模式(Command):将一个请求封装为一个对象,以便使用不同的请求对客户端进行参数化。
- 解释器模式(Interpreter):给定一个语言,定义对其文法的解释器,或定义一个表达式接口,用于解释一个特定域中的语言。
- 迭代器模式(Iterator):提供一种方法来顺序访问一个集合中的元素,而不暴露其底层表示。
- 中介者模式(Mediator):定义一个中介对象来协调多个对象之间的交互。
- 状态模式(State):允许一个对象在内部状态改变时改变其行为。
- 职责链模式(Chain of Responsibility):将请求的处理链条化,并允许沿着该链条传递请求直到找到适当的处理程序。
- 行为型模式广泛用于软件开发中,以提高代码的可理解性、可维护性、可重用性和可扩展性。