构造者模式(又叫生成器模式 Builder Pattern)
将一个复杂对象(下面说的车,手机等)的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
首先看UML图

可以看到他主要的3个部分,还是借鉴大家普遍采用的汽车制造来说明
首先是一个抽象类Builder,Builder中声明了一个具体产品各部件所需要的抽象方法以及一个返回最终产品的抽象方法。比如建造轮胎,建造引擎,建造外壳……以及一个返回最终产品车的方法
public abstract class Builder {
public abstract void buildEngine();
public abstract void bulidTyre();
public abstract void buildCar();
public abstract void getCar();
}
其次,是下面的具体实现类ConcreeteBuilder,这也是构造者模式的最主要部分,他负责详细的去定义每个部件的具体制作,也就是不同的ConcreeteBuilder实现不同的建造轮胎,引擎,外壳的方法,比如我们具体类分别为BMW,Ford。。。
public class BMW extends Builder{
public void buildCar() {
...//造外壳细节
}
public void buildEngine() {
...//造引擎
}
public void bulidTyre() {
...//造轮胎
}
public Car getCar() {
return new Car();
}
}
最后,是一个Director类,他类似于一个发令员,在汽车制造中,就是负责组装,将各个部件组合成最终产品,交还给客户,调用一个Builder类对象,并指导完成各步建造
public class Director {
public void product(Builder builder){
builder.buildCar();
builder.buildEngine();
builder.bulidTyre();
}
}
到此为止,生成器模式就完成了,来看看如何去制造一个具体的产品返回给客户
public class Client {
public static void main(String args[]){
Builder builder=new BMW();//创建一个Builder对象
Director director=new Director();//创建一个Director对象
director.product(builder);//Director对象造车
builder.getCar();//将制造的车返回
}
}
最终我们的构造者/生成器模式,带给我们了这样的结果
●生成器模式可以改变它所构建的产品的内部表示,另外还隐藏了产品如何装配的细节(Director)
●每个特定的生成器与其他生成器以及程序的其余部分无关。这增强了程序的模块性,并使增加额外模块变得相对简单(很明显,只要再实现一个新的ConcreeteBuilder即可)
●由于每个生成器都是根据数据逐步构建最终产品的,因此可以对生成器所构建的每个最终产品拥有更多的控制(在ConcreeteBuilder中)
总结下生成器模式与抽象工厂的区别,他们都返回由多个方法和对象组成的类
抽象工厂模式返回一系列相关的类
生成器模式根据所提供的数据将逐步构建一个复杂的对象
如果对比抽象工厂中举的手机例子,我的理解是,生成模式将为每个手机的建造提供一致的方法,比如建造外壳(Nokia),建造电池,建造芯片,安装系统。。。。。可以明显看出2个设计模式的区别

- 大小: 10.2 KB
分享到:
相关推荐
这种设计模式使得对象之间的关系更加清晰,也方便了单元测试。 **面向切面编程(AOP,Aspect-Oriented Programming)**: AOP是Spring提供的另一关键特性,它允许开发者定义“切面”——关注点的模块化,如日志、...
### 偌依框架的使用学习笔记 #### 一、若依框架的介绍与说明 若依框架是一款基于Spring Boot、Spring Security、JWT、Vue和Element的全开源快速开发平台,旨在提供高效的前后端分离解决方案。它具备以下特点: 1....
Spring支持构造器注入、setter注入和接口注入等多种方式来实现DI。 3. **配置元数据**:Spring通过XML、Java注解或基于Java的配置来定义bean的元数据,这些元数据描述了bean的属性、依赖关系以及初始化方法等信息。...
接口是实现多态的一种手段,也是设计模式的重要组成部分。 #### 第 10 章 内部类 第十章介绍了内部类的概念。内部类是在另一个类的内部定义的类,它可以访问外部类的成员变量甚至是私有变量。本章讨论了成员内部类...
- 依赖注入是一种设计模式,用于管理对象间的依赖关系,提高代码的可测试性和松耦合性。 **环境设置** - **选择编译环境**:可以根据项目需求选择适合的编译环境,如Eclipse、IntelliJ IDEA等。 - **设置Ant/Maven...
7. **设计模式**:在解题过程中可能会遇到一些通用的解决方案,如工厂模式、装饰器模式等,这些都是软件设计的重要组成部分。 通过深入学习和实践这些知识点,不仅可以提升我们的编程能力,也有助于我们在实际工作...