### 设计模式之创建者模式详解 #### 一、创建者模式概述 创建者模式(Builder Pattern),又称建造者模式,是一种常用的软件设计模式。它主要用于解决对象创建时的复杂性和灵活性问题。创建者模式的核心思想是将一个复杂的对象构建与其表示分离,使相同的构建过程可以创建不同的表示。 #### 二、创建者模式的角色划分 创建者模式主要由以下四个角色组成: 1. **建造者角色(Builder)**: - 定义创建产品对象的公共接口。 - 不涉及具体的部件生产,只提供统一的创建接口。 - 该角色主要负责定义一系列用于创建产品各个部件的方法,但不涉及具体的实现细节。 2. **具体创建者角色(ConcreteBuilder)**: - 实现Builder接口中的抽象方法。 - 负责完成各个部件的具体生产工作。 - 通常情况下,具体创建者角色会根据不同的需求实现不同的产品构建逻辑。 3. **指导者(Director)**: - 负责调用具体创建者角色中的方法以创建最终的产品对象。 - 通常情况下,指导者并不关心具体的产品细节,而是负责协调不同部件的创建顺序或条件。 - 在指导者的控制下,不同的具体创建者可以构建出相同结构但不同表现形式的产品。 4. **产品(Product)**: - 是创建者模式的目标产品。 - 可能由多个部分组成,这些部分可能有各自不同的创建方式。 - 通过具体的创建者角色进行组装,最终形成一个完整的对象。 #### 三、创建者模式的应用场景 创建者模式适用于以下情况: - 当创建一个复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 - 当构造过程必须允许被构造的对象有不同的表示时。 - 当对象的创建过程很复杂且需要精确控制其创建步骤时。 - 当对象的各个部件是分步骤创建的,并且每一步骤都可以变化时。 #### 四、创建者模式的示例解析 为了更好地理解创建者模式,我们可以通过一个简单的示例来进行说明。 1. **定义Product类**:Product类代表最终要创建的产品对象,这里使用一个`List<String>`来存储产品的各个部分。 2. **定义Builder抽象类**:定义Builder接口或抽象类,其中包含了创建产品各个部分的抽象方法。 3. **定义具体创建者角色**:例如`BuilderA`和`BuilderB`,它们分别实现了Builder接口,并提供了具体的产品构建逻辑。 4. **定义指导者角色**:`BuilderDirector`类负责调用具体创建者中的方法以构建产品。 ```java // Product 类 public class Product { private List<String> parts = new ArrayList<String>(); public void add(String partName){ parts.add(partName); } public void show(){ System.out.println("----产品创建----"); for (String part : parts) { System.out.println(part); } } } // Builder 抽象类 public abstract class Builder { protected abstract void buildPartA(); protected abstract void buildPartB(); protected abstract void buildPartC(); protected abstract Product getResult(); } // 具体创建者角色 BuilderA public class BuilderA extends Builder { private Product product = new Product(); @Override protected void buildPartA() { product.add("partA"); } @Override protected void buildPartB() { product.add("partB"); } @Override protected void buildPartC() { product.add("partC"); } @Override protected Product getResult() { return product; } } // 具体创建者角色 BuilderB public class BuilderB extends Builder { private Product product = new Product(); @Override protected void buildPartA() { product.add("partX"); } @Override protected void buildPartB() { product.add("partY"); } @Override protected void buildPartC() { product.add("partZ"); } @Override protected Product getResult() { return product; } } // 指导者角色 public class BuilderDirector { private Builder builder; public BuilderDirector(Builder builder) { this.builder = builder; } public Product construct() { builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); return builder.getResult(); } } ``` #### 五、创建者模式的优点 1. **封装性好**:客户端不必知道产品内部组成的细节。 2. **易于扩展**:增加新的具体创建者角色非常容易,不会影响到其他模块。 3. **灵活度高**:能够构造出多种不同类型的产品对象,适应多变的需求。 4. **符合单一职责原则**:每个具体创建者只负责构建产品的一部分,职责明确。 #### 六、创建者模式的局限性 1. **产品类型增加时,系统将变得复杂**:如果产品类型较多,那么需要定义很多具体创建者类。 2. **违反开闭原则**:如果产品的内部组成发生变化,则所有创建者类都需要重新编写。 创建者模式为复杂对象的构建提供了一种灵活高效的方法,特别适用于那些对象构建过程复杂且需要高度定制化的场景。
- 粉丝: 5535
- 资源: 674
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助