建造者模式(Builder Pattern)
建造者模式(Builder Pattern)
建造者模式是一种创建型设计模式,它将复杂对象的构建过程与其表现形式分离,从而使相同的构建过程能够生成不同的对象表示形式。这种模式特别适用于需要构造包含多个部分的复杂对象,并且这些部分的构建顺序或配置可能需要灵活调整的场景。
1. 核心概念
-
产品(Product):最终要构建的复杂对象,通常由多个部件组成。
- 在示例代码中,
Computer
类就是产品类,它包含了 CPU、RAM 和存储等部件。
- 在示例代码中,
-
抽象建造者(Builder):定义构建产品的各个步骤的接口。
- 示例中的
ComputerBuilder
接口定义了构建 CPU、RAM 和存储的方法,以及获取最终产品的getComputer()
方法。
- 示例中的
-
具体建造者(Concrete Builder):实现抽象建造者的接口,提供具体的构建逻辑,并负责构建和装配各个部件。
- 示例中的
DesktopBuilder
是具体建造者类,它实现了ComputerBuilder
接口,并提供了具体的构建方法。
- 示例中的
-
指挥者(Director):负责控制构建过程,按照一定的顺序调用建造者的各个方法来构建产品。
- 示例中的
Director
类通过construct
方法控制构建过程,依次调用buildCpu
、buildRam
和buildStorage
方法。
- 示例中的
-
客户端(Client):使用指挥者和具体建造者来创建产品。
- 示例中的
BuilderPattern
类是客户端代码,它创建了一个DesktopBuilder
实例,并通过Director
来构建Computer
对象。
- 示例中的
2. 设计原则
建造者模式体现了多个重要的设计原则:
单一职责原则 (Single Responsibility Principle, SRP)
- 体现:
Computer
类只负责存储计算机的各个部件信息。ComputerBuilder
接口和它的实现类DesktopBuilder
只负责构建计算机的各个部件。Director
类只负责控制构建过程的顺序。
每个类都有明确的职责范围,这使得代码更易于理解和维护。
开闭原则 (Open/Closed Principle, OCP)
- 体现:
- 如果需要添加新的类型的计算机(如
LaptopBuilder
),只需创建一个新的具体建造者类并实现ComputerBuilder
接口,而无需修改现有的代码。
- 如果需要添加新的类型的计算机(如
这种方式使得系统能够在不改变现有代码的情况下进行扩展,从而降低了引入新错误的风险。
依赖倒置原则 (Dependency Inversion Principle, DIP)
- 体现:
Director
类依赖于ComputerBuilder
接口,而不是具体的建造者类(如DesktopBuilder
)。- 具体建造者类实现了
ComputerBuilder
接口,这样高层模块(Director
)和低层模块(具体建造者)都依赖于抽象(ComputerBuilder
接口)。
这种设计使得高层模块和低层模块之间的耦合度降低,提升了系统的灵活性和可维护性。
接口隔离原则 (Interface Segregation Principle, ISP)
- 体现:
ComputerBuilder
接口只定义了构建计算机所需的方法(buildCpu
,buildRam
,buildStorage
,getComputer
),没有多余的方法。- 客户端(如
Director
)只需要知道如何使用这些方法来构建计算机,而不需要关心其他不必要的细