5.2 创建型模式(Creational Patterns)
创建型模式提供了一种在创建对象时隐藏创建逻辑的方式,而不是使用新运算符直接实例化对象。这使得程序在判断应该使用哪个类实例化对象时更加灵活。创建型模式包括单例模式、原型模式、工厂方法模式、抽象工厂模式和建造者模式。
单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点,适用于需要控制资源访问或需要全局状态管理的场景。
实现方式通常包括私有化构造函数和提供一个静态方法来获取实例。
原型模式(Prototype Pattern):通过复制现有对象来创建新对象,而不是通过实例化类。
适用于创建对象成本较高或对象初始化需要较多资源的场景。需要实现一个原型接口,该接口声明一个克隆方法。
工厂方法模式(Factory Method Pattern):
定义一个用于创建对象的接口,但让子类决定实例化哪个类。
使一个类的实例化延迟到其子类。
适用于需要创建对象但不想在代码中直接指定具体类的场景。
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用于需要创建多个相互关联或依赖的对象的场景。
增强了系统的可扩展性和灵活性。
建造者模式(Builder Pattern):
将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
适用于需要创建复杂对象的场景,这些对象通常由多个部分组成。
通过逐步构建对象来简化创建过程,并允许在创建过程中进行定制。
5.3 结构型模式(Structural Patterns)
结构型模式以某种方式组合或聚合对象,以形成更大的结构。这些模式主要关注于如何组合和表示类或者对象,以提供更丰富的结构。结构型模式包括适配器模式、代理模式、装饰者模式、桥接模式、组合模式、外观模式和享元模式。
适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期待的另一种接口形式。
适用于需要将不兼容的接口转换为兼容接口的场景。
可以是类适配器(通过继承实现)或对象适配器(通过组合实现)。
代理模式(Proxy Pattern):
为其他对象提供一种代理以控制对这个对象的访问。
适用于需要延迟加载、控制访问权限或提供额外功能的场景。
代理对象充当真实对象的代表,并提供对真实对象的访问。
装饰者模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。
适用于需要灵活地为对象添加功能而不影响其他对象的场景。
通过将对象放入包含行为的特殊封装对象中来增加功能。
桥接模式(Bridge Pattern):
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
适用于需要将抽象与实现解耦的场景,以便它们可以独立演化的场景。
通过使用组合和继承来实现抽象与实现的分离。
组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。
适用于需要表示对象之间整体与部分关系的场景。
使得客户端对单个对象和组合对象的使用具有一致性。
外观模式(Facade Pattern):提供一个统一的接口,用来访问子系统中的一群接口。
适用于需要简化复杂系统的使用场景,通过提供一个简单的接口来访问子系统。
降低了客户端与子系统之间的耦合度。
享元模式(Flyweight Pattern):
使用共享对象,用以尽可能减少内存使用和提高性能。
适用于需要创建大量相似对象的场景,这些对象的大部分状态都可以共享。
通过分离内部状态和外部状态来减少内存占用。
总结:第5.2节和5.3节详细介绍了创建型模式和结构型模式的概念、原理和应用场景。这些模式为设计可复用、灵活和可扩展的面向对象软件提供了有力的支持。
创建型模式提供了一种在创建对象时隐藏创建逻辑的方式,而不是使用新运算符直接实例化对象。这使得程序在判断应该使用哪个类实例化对象时更加灵活。创建型模式包括单例模式、原型模式、工厂方法模式、抽象工厂模式和建造者模式。
单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点,适用于需要控制资源访问或需要全局状态管理的场景。
实现方式通常包括私有化构造函数和提供一个静态方法来获取实例。
原型模式(Prototype Pattern):通过复制现有对象来创建新对象,而不是通过实例化类。
适用于创建对象成本较高或对象初始化需要较多资源的场景。需要实现一个原型接口,该接口声明一个克隆方法。
工厂方法模式(Factory Method Pattern):
定义一个用于创建对象的接口,但让子类决定实例化哪个类。
使一个类的实例化延迟到其子类。
适用于需要创建对象但不想在代码中直接指定具体类的场景。
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用于需要创建多个相互关联或依赖的对象的场景。
增强了系统的可扩展性和灵活性。
建造者模式(Builder Pattern):
将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
适用于需要创建复杂对象的场景,这些对象通常由多个部分组成。
通过逐步构建对象来简化创建过程,并允许在创建过程中进行定制。
5.3 结构型模式(Structural Patterns)
结构型模式以某种方式组合或聚合对象,以形成更大的结构。这些模式主要关注于如何组合和表示类或者对象,以提供更丰富的结构。结构型模式包括适配器模式、代理模式、装饰者模式、桥接模式、组合模式、外观模式和享元模式。
适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期待的另一种接口形式。
适用于需要将不兼容的接口转换为兼容接口的场景。
可以是类适配器(通过继承实现)或对象适配器(通过组合实现)。
代理模式(Proxy Pattern):
为其他对象提供一种代理以控制对这个对象的访问。
适用于需要延迟加载、控制访问权限或提供额外功能的场景。
代理对象充当真实对象的代表,并提供对真实对象的访问。
装饰者模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。
适用于需要灵活地为对象添加功能而不影响其他对象的场景。
通过将对象放入包含行为的特殊封装对象中来增加功能。
桥接模式(Bridge Pattern):
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
适用于需要将抽象与实现解耦的场景,以便它们可以独立演化的场景。
通过使用组合和继承来实现抽象与实现的分离。
组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。
适用于需要表示对象之间整体与部分关系的场景。
使得客户端对单个对象和组合对象的使用具有一致性。
外观模式(Facade Pattern):提供一个统一的接口,用来访问子系统中的一群接口。
适用于需要简化复杂系统的使用场景,通过提供一个简单的接口来访问子系统。
降低了客户端与子系统之间的耦合度。
享元模式(Flyweight Pattern):
使用共享对象,用以尽可能减少内存使用和提高性能。
适用于需要创建大量相似对象的场景,这些对象的大部分状态都可以共享。
通过分离内部状态和外部状态来减少内存占用。
总结:第5.2节和5.3节详细介绍了创建型模式和结构型模式的概念、原理和应用场景。这些模式为设计可复用、灵活和可扩展的面向对象软件提供了有力的支持。