建造者模式(Builder)

建造者模式是创建性模式的一种,主要使用场景是创建一些相似且复杂的对象。比如各种型号的手机,都是由cpu,内存,屏幕,主板等部分构成的,各个组成部分相似,但每个部分又是比较复杂的。

为了组装一台任意型号的手机,采用建造者模式是不错的,用户无需关注你是怎么构建手机的,只要拓展一个该型号手机的建造器,并由手机组装的统一指挥员指挥即可。看一下类图:

由类图可以看出,Builder接口定义了需要构造哪些东西,产品生产是靠具体的构造器(ConcreteBuilder)的,指挥类(Director)可以对多个builder进行指挥。当需要新增一种产品的时候,只要新增一个具体的构造器(ConcreteBuilder)就可以了。

手机组装的代码实例:

定义手机类:

//定义一个手机类,假设手机由cpu和memory组成
public class Phone {
	private String cpu;
	private String memory;
    //getter & setter & toString
}

定义构造器接口,每个实例构造器都要实现该类

public interface PhoneBuilder {
	/**
	 * 建造者模式适用于复杂对象的创建和使用,且差异性较小,或很多参数有默认值,这样也可以用抽象类代替接口
	 */
	void buildCpu();
	void buildMemory();
	Phone getPhone();
}

定义一个指挥类,对上面的PhoneBuilder接口中的方法进行指挥

public class PhoneDirector {
	//这里比较简单,指挥类还可以同时指挥其他builder
	private PhoneBuilder phoneBuilder;
	public PhoneDirector() {
	}
	public PhoneDirector(PhoneBuilder phoneBuilder) {
		this.phoneBuilder = phoneBuilder;
	}
	//同样的构建过程
	public void construct() {
		phoneBuilder.buildCpu();
		phoneBuilder.buildMemory();
	}
	public void showPhone() {
		System.out.println(phoneBuilder.getPhone());
	}
}

最后就是对接口中的建造细节进行实现了,定义了华为和小米手机:

public class HuaWeiBuilder implements PhoneBuilder {
	private Phone phone = new Phone();
	@Override
	public void buildCpu() {
		//封装复杂的构建过程
		phone.setCpu("HuaWeiCpu");
	}
	@Override
	public void buildMemory() {
		//封装复杂的构建过程
		phone.setMemory("HuaWeiMemory");
	}
	public Phone getPhone() {
		return phone;
	}
}
public class XiaoMiBuilder implements PhoneBuilder {
	private Phone phone  = new Phone();
	@Override
	public void buildCpu() {
		phone.setCpu("XiaoMiCpu");
	}
	@Override
	public void buildMemory() {
		phone.setMemory("XiaomiMemory");
	}
	public Phone getPhone() {
		return phone;
	}
}

使用的时候只要将具体的构造器交给指挥员指挥就行了

public class Main {
	public static void main(String[] args) {
		//将具体的建造器交给指挥员指挥
		PhoneDirector huaWeiPhoneDirector = new PhoneDirector(new HuaWeiBuilder());
		huaWeiPhoneDirector.construct();
		huaWeiPhoneDirector.showPhone();

		PhoneDirector XiaoMiPhoneDirector = new PhoneDirector(new XiaoMiBuilder());
		XiaoMiPhoneDirector.construct();
		XiaoMiPhoneDirector.showPhone();
	}
}

好,新鲜的华为和小米出炉了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值