Java设计模式——建造者设计模式(Builder Pattern)

一、建造者模式定义

        定义:  建造者设计模式是一个构造复杂对象的设计模式,在一个软件系统中,可能会面临创建一个复杂对象的工作,如果使用单一的方法或者单一的对象来创建会比较烦琐,当所创建复杂对象发生改变时,整个系统就可能面临剧烈的变化。这时就需要我们将这个复杂对象的创建过程分解成若干部分,各个子部分用一定的算法构成。但是,子部分可能会经常发生变化,如何能保证整体创建工作的稳定性呢?这就需要建造者模式,建造者模式把复杂对象的创建与表示分离,使得同样的构建过程可以创建不同的表示。

二、建造者模式的使用场景

    1》当生成的产品对象内部具有复杂的结构时;

    2》当复杂对象需要与表示分离,可能需要创建不同的表示时;

    3》当需要向客户隐藏产品内部结构的表现时。

    建造者模式适用于对象结构复杂、对象构造和表示分离的情况。任何一种软件设计模式的最终目标都是实现软件的高内聚、低耦合,实现易扩展、易维护。建造者设计模式的实质是解耦组装过程和创建具体部件,使得不用去关心每个部件是如何组装的,只需要知道各个部件是干什么的(实现什么功能)。建造者模式使得产品内部的结构表现可以独立变化,客户端不需要知道产品内部结构的组成细节。抽象工厂设计模式是解决“产品系列家族”的一种模式,而建造者设计模式是解决“一个对象部分”需要变化的一种设计模式。

    建造者设计模式的优点在于其构建和表示的分离,有效地将复杂对象处理过程分解,降低功能模块之间的耦合度,增强模块内部的内聚度,使得其在软件设计模式中具有极其重要的位置。

三、建造者设计模式类图

建造者模式通常包括 以下几个角色:

1》Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。

2》ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。在建造过程完成后,提供产品的实例。

3》Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

4》Product:要创建的复杂对象。

四、建造者应用实例:

       1》去肯德基,汉堡,可乐,薯条,炸鸡翅等是不变的,而其组合是经常变化的,生成数所谓的“套餐”。

       2》Java 中的StringBuilder。

五、建造者模式实例

    1、创建一个车的实体类

public class Car {
	
	private String color;
	private int carDoor;
	private int tires;
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public int getCarDoor() {
		return carDoor;
	}
	public void setCarDoor(int carDoor) {
		this.carDoor = carDoor;
	}
	public int getTires() {
		return tires;
	}
	public void setTires(int tires) {
		this.tires = tires;
	}
	
	

}

2、造车

public interface CreateCar {
	
	public void selectColor();
	
	public void selectCarDoor();
	
	public void selectTires();
	
	public Car createCar();
	
}

3、实现车的样式

public class CreateCarImpl implements CreateCar{
	
	Car car;

	public CreateCarImpl() {
		// TODO Auto-generated constructor stub
		car = new Car();
	}
	
	
	@Override
	public void selectColor() {
		// TODO Auto-generated method stub
		car.setColor("颜色");
	}

	@Override
	public void selectCarDoor() {
		// TODO Auto-generated method stub
		car.setCarDoor(2);
	}

	@Override
	public void selectTires() {
		// TODO Auto-generated method stub
		car.setTires(4);
	}

	@Override
	public Car createCar() {
		// TODO Auto-generated method stub
		return car;
	}

}

4、销售人员描述此车

public class CarDirector {
	
	public CreateCar direct(CreateCar createCar){
		
		createCar.selectCarDoor();
		createCar.selectColor();
		createCar.selectTires();
		return createCar;
	};
	
}

5、向客户展现此车

public class CarMain {

	public static void main(String[] args) {
		
		CarDirector director = new CarDirector();
		
		director.direct(new CreateCarImpl());
		
		
		
	}
}


猜你喜欢

转载自blog.csdn.net/chaoyue1861/article/details/80880057