java 建造者(Builder)模式

Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。


Builder模式的应用场景
- 对象的创建:Builder模式是为对象的创建而设计的模式
- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象
- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法


Builder模式的应用范例
下面我们举个例子来加深我们对Builder模式的理解。
比如我们要通过一个汽车加工厂,组装一辆汽车;汽车由车头,车身,车尾3部分组成;它的基本组装步骤是:
- 组装车头
- 组装车身
- 组装车尾

不管被组装的是吉普车,卡车,还是公交车,它们都可以各自重新定义车头,车身与车尾的组装方法;而通过这些被重新定义的组装方法,通过相同的组装步骤就可以组装具有不同属性的各类汽车了。
通过上面的分析,我们知道,该范例满足Builder模式的应用场景所提到的条件:
- 对象的创建:我们需要创建汽车对象
- 创建的是一个复合对象:我们需要创建的汽车对象是具有车头,车身,车尾等复合属性的复合对象
- 关注对象创建的各部分的创建过程:吉普车,卡车等对车头,车身,车尾的组装方法不尽相同


下面我们用Builder设计模式来抽象以上组装过程:
- CarDirector:汽车组装操作的封装类
- CarBuilder:汽车组装抽象类
- JeepBuilder:吉普车组装类,继承自CarBuilder类。
- Car:汽车类,包括车头,车身,车尾等属性。相当于产品类。由CarBuilder/JeepBuilder等创建。

源代码

//汽车类
public class Car {
//车头
private String head;
//车身
private String body;
//车尾
private String tail;

public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getTail() {
return tail;
}
public void setTail(String tail) {
this.tail = tail;
}
}


//汽车组装抽象类
public abstract class CarBuilder {
//组装车头
public abstract void makeHead();
//组装车身
public abstract void makeBody();
//组装车尾
public abstract void makeTail();
//得到被组装好的汽车对象
public abstract Car getCar();
}

//吉普车组装类
public class JeepBuilder extends CarBuilder {
Car car = new Car();

//组装车头
public void makeHead() {
car.setHead("Jeep head");
}
//组装车身
public void makeBody() {
car.setHead("Jeep body");
}
//组装车尾
public void makeTail() {
car.setHead("Jeep tail");
}

public Car getCar() {
return car;
}
}


//汽车组装操作的封装类:该类封装了对整个汽车的组装操作
public class CarDirector {
//汽车的组装操作
public void makeCar(CarBuilder builder) {
//组装车头
builder.makeHead();
//组装车身
builder.makeBody();
//组装车尾
builder.makeTail();
}
}

//调用
public class Client {
public static void main(String[] args) {
CarDirector director = new CarDirector();

//创建吉普车生成器(工厂)
CarBuilder b = new JeepBuilder();
//调用CarDirector组装整个汽车
director.makeCar(b);

//得到组装好的汽车
Car car = b.getCar();
System.out.println(car.getHead());
System.out.println(car.getBody());
System.out.println(car.getTail());
}
}


上面演示了吉普车(Jeep)的生产过程,如果需要创建公交车(Bus),我们可以依葫芦画瓢,使用一个继承自CarBuilder的BusBuilder,便可简单地生产一个具有与吉普车不同的车头,车身,车尾的汽车来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值