建造者模式(Java实现)

建造者模式概念

是创建型模式之一,使用多个简单的对象创建一个复杂的对象,用于将一个复杂的构建与其表示分离,使得同样的构建过程可以创建不同的表示,然后通过一个Builder类创建最终对象。

建造者模式解决的问题

建造者模式主要用于解决软件系统中复杂对象的创建问题。例如复杂对象的创建通过各个部分的子对象用一定的算法构成,在需求变化时复杂对象面临大的改变,不利于系统的稳定,使用建造者将各个部分的算法包装起来,需求变化只需要将算法的顺序以及组合方式改变即可。

建造者模式需要的模块

Builder:创建一个复杂产品对象的抽象接口
ConcreteBuilder:Builder接口的实现类,用于定义复杂产品的各个部分的装配流程
Director:构造一个使用Builder接口的对象
Product:表示被构造的复杂对象,ConcreteBuilder定义了该复杂对象的装配流程,而Product定义了该复杂对象的结构和内部表示

类间关系图

建造者模式

Java实现

复杂产品房子

public class House {
	private String baise;
	private String wall;
	private String roofed;
	public String getBaise() {
		return baise;
	}
	public void setBaise(String baise) {
		this.baise = baise;
	}
	public String getWall() {
		return wall;
	}
	public void setWall(String wall) {
		this.wall = wall;
	}
	public String getRoofed() {
		return roofed;
	}
	public void setRoofed(String roofed) {
		this.roofed = roofed;
	}
}

Builder类

//抽象建设者,主要用来指定建设步骤
public abstract class HouseBuilder {
	protected House house = new House();
	//建设房屋的基本方法,建设根基、建设墙、建设屋顶
	public abstract void buildBasic();
	public abstract void buildWalls();
	public abstract void roofed();
	public House buildHouse() {
		return house;
	}
}

两个实现类
高楼大厦

public class HighBuilding extends HouseBuilder{
	@Override
	public void buildBasic() {
		System.out.println("高楼地基");
	}
	@Override
	public void buildWalls() {
		System.out.println("高楼墙面");
	}
	@Override
	public void roofed() {
		System.out.println("高楼屋顶");
	}
}

普通的房屋

public class CommonHouse extends HouseBuilder{
	@Override
	public void buildBasic() {
		System.out.println("普通房子基地");
	}
	@Override
	public void buildWalls() {
		System.out.println("普通房子墙面");
	}
	@Override
	public void roofed() {
		System.out.println("普通房子屋顶");
	}
}

Director类

//指挥者
public class HouseDirector {
	HouseBuilder houseBuilder = null;
	//构造器创建bilder对象
	public HouseDirector(HouseBuilder houseBuilder) {
		this.houseBuilder = houseBuilder;
	}
	//通过set方法设置对象属性
	public void setHouseBuilder(HouseBuilder houseBuilder) {
		this.houseBuilder = houseBuilder;
	}
	//建造房屋的流程交给指挥者
	public House constructHouse() {
		houseBuilder.buildBasic();
		houseBuilder.buildWalls();
		houseBuilder.roofed();
		return houseBuilder.buildHouse();
	}
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值