建造者模式--介绍、应用及代码

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

特征:

产品类:封装创建对象的具体过程,具体类非抽象类

抽象建造者:将建造的具体过程交予它的子类实现,一般至少两个抽象方法:建造产品,返回产品

建造者:实现抽象类的所有未实现的方法:组件产品、返回组建好的产品

导演类:将产品创建跟客户分离,也是建造者模式的核心,它直接与建造者交互,而不与产品类交互。一般封装程序中易变的部分。

实例:

去电脑城买电脑,你给了价格,让导购帮你组装一台电脑,导购会帮你去几家电脑店看看,每一家组装电脑配置也不同,你选择你满意的。其中:

产品类--电脑 导演类:导购 建造者:N家电脑店 抽象建造者:电脑组装过程抽象

代码如下:

//产品类--电脑
public class Computer {
	private String name;
	private String price;
	private String type;
	public void shwoComputer(){
		System.out.println("名称:"+name);
		System.out.println("价格:"+price);
		System.out.println("类型:"+type);
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
}

//抽象建造者--组装并返回电脑的过程抽象
public abstract class Builder {
	public abstract void setComputer(String name,String price,String type);
	public abstract Computer getComputer();
}

//具体建造者--组装电脑的实体店1
public class BuilderShop1 extends Builder {

	private Computer computer=new Computer();
	@Override
	public void setComputer(String name1, String price1, String type1) {
		// TODO Auto-generated method stub
		computer.setName(name1);
		computer.setPrice(price1);
		computer.setType(type1);
	}

	@Override
	public Computer getComputer() {
		// TODO Auto-generated method stub
		return computer;
	}

}

//具体建造者--组装电脑的实体店2
public class BuilderShop2 extends Builder {

	private Computer computer=new Computer();
	@Override
	public void setComputer(String name2, String price2, String type2) {
		// TODO Auto-generated method stub
		computer.setName(name2);
		computer.setPrice(price2);
		computer.setType(type2);
	}

	@Override
	public Computer getComputer() {
		// TODO Auto-generated method stub
		return computer;
	}

}

//导演类--导购,又可以说是建造者的指挥者
public class Director {
	private Builder builder1=new BuilderShop1();
	private Builder builder2=new BuilderShop2();
	public Computer getAComputer(){
		builder1.setComputer("华硕", "4000", "台式");
		return builder1.getComputer();
	}
	
	public Computer getBComputer(){
		builder2.setComputer("戴尔", "4000", "笔记本");
		return builder2.getComputer();
	}
}

public class BuilderPattern {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//进赛格电脑城找一导购
		Director director=new Director();
		//你说了一个价格,导购去两个店子给你组装了两台电脑
		String price="4000";
		Computer computer1=director.getAComputer();
		computer1.shwoComputer();
		Computer computer2=director.getBComputer();
		computer2.shwoComputer();
		//电脑配置你看完以后,参照你自己的价格标准最终选择一台
		//至始至终,你跟导购其实都不关心电脑是如何组装的,你们只关心最后组装完成后的电脑是否符合你的要求
		//剩下的事情就是你自己选择一台电脑了
	}

}
说说建造者模式跟工厂模式的异同

两者极为相似,总体上,建造者模式比工厂模式就多了一个“导演类”,其实可以把工厂模式中的暴发户当做导演类理解。

不同的是,工厂模式产品创建过程封装在工厂类中,建造者模式产品创建封装在导演类中,具体创建过程由导演类指挥建造者进行。

总结:产品建造复杂?用工厂模式! 产品建造非常复杂?用建造者模式!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值