JAVA构建者模式

一、建造者模式

将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。

下面以生产汽车为例子:

建造的复杂对象Car,提供基本方法。

public class Car {

	private String chassis; //汽车底盘
	private String tyre;  //汽车轮胎
	private String steeringWheel; //汽车方向盘
	public String getChassis() {
		return chassis;
	}
	public void setChassis(String chassis) {
		this.chassis = chassis;
	}
	public String getTyre() {
		return tyre;
	}
	public void setTyre(String tyre) {
		this.tyre = tyre;
	}
	public String getSteeringWheel() {
		return steeringWheel;
	}
	public void setSteeringWheel(String steeringWheel) {
		this.steeringWheel = steeringWheel;
	}
}

抽象的建造者接口,主要是实现所有声明的方法以及返回建造好的产品实例。


public interface CarBuilder {
	public void createChassis();
	public void createTyre();
	public void createsSteeringWheel();
	public Car builder();
}

具体建造者实现了抽象建造者接口,主要是实现所有声明的方法以及返回建造好的产品实例。

public class SagitarCarBuilder implements CarBuilder{
	private Car car=new Car();
	public void createChassis() {
		car.setChassis("速腾的底盘,嗷嗷叫,断轴很牛逼!");
	}
	public void createTyre() {
		car.setTyre("固特异的轮胎,还可以");
	}
	public void createsSteeringWheel() {
		car.setSteeringWheel("真皮方向盘!就问你牛逼不?");	
	}
	public Car builder() {
		return car;
	}
}

负责调用具体建造者按照顺序建造产品。导演者只负责调度,真正执行的是具体建造者角色。

public class CarDirector {
	private CarBuilder carBuilder;
	public CarDirector(CarBuilder carBuilder){
		this.carBuilder = carBuilder;
	}
	public Car construct(){
		carBuilder.createChassis();
		carBuilder.createTyre();
		carBuilder.createsSteeringWheel();
		return carBuilder.builder();
	}
}

二、建造者模式的优缺点

优点

1)降低代码耦合度。在建造者模式中,客户端不需要知道产品内部是如何实现的,我们只需得到产品的对象。并且使用导演者和建造者分离组装过程和组件具体构造过程,具有灵活的扩展性。

2)优秀的扩展性。具体建造者相互独立,方便扩展,符合开闭原则。

缺点

1)一定的使用范围限制。建造者模式的产品的组件基本相同,如果产品的差异性较大,建造者模式就不适用了。

三、比较

跟工厂方法模式对比:建造者模式和工厂模式同样是创建一个产品,工厂模式就是一个方法,而建造者模式有多个方法,并且建造者模式是有顺序的执行方法。就是说建造者模式强调的是顺序,而工厂模式没有顺序一说。





猜你喜欢

转载自blog.csdn.net/wq_wangqiang/article/details/80608003