Java设计模式——建造者设计模式

一、建造者模式定义

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

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

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

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

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

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

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

三、建造者设计模式类图

在这里插入图片描述
建造者模式通常包括 以下几个角色:

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

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

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

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

四、建造者模式实例

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());
		
		
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值