建造者模式

建造超人的例子

 

建造成年超人及未成年超人实例代码

 

public class Client {
	
	public static void main(String[] arg) {

		SuperMan superMan = Director.getAdultBuilder();

		superMan.getSpecialTalent();
	}
}

//导演类
public class Director {
	
	//成年超人建造者
	private static Builder adultBuilder = new AdultSuperManBuilder();
	//未成年人建造者
	private static Builder childBuilder = new ChildSuperManBuilder();

	//小超人
	public static SuperMan getAdultBuilder {
		Builder builder = new Builder();
		return adultBuilder.getSuperMan();
	}

	//成年超人
	public SuperMan getChildBuilder {
		return childBuilder.getSuperMan();
	}
}

//模板方法模式,超人的各个部件都准备好了,具体如何组装由实现类类决定
public abstract class Builder {
	
	protected final SuperMan superMan = new SuperMan();

	public void setBody(String body) {
		superMan.setBody(body;)
	}

	public void setSpecialTalent(String st) {
		superMan.setSpecialTalent(st);
	}

	public void setSpecialSymbol(String ss) {
		superMan.setSpecialSymbol(ss);
	}

	public abstract SuperMan getSuperMan() ;
}


//建造成年超人
public class AdultSuperManBuilder extends Builder {
	
	@Override
	public SuperMan getSuperMan() {
		super.setBody("强壮的躯体");
		super.setSpecialTalent("会飞行");
		super.setSpecialSymbol("胸前带S标记");
		return super.superMan;
	}

}

//建造未成年超人
public class ChildSuperManBuilder extends Builder {
	
	@Override
	public SuperMan getSuperMan() {
		super.setBody("强壮的躯体");
		super.setSpecialTalent("刀枪不入");
		super.setSpecialSymbol("胸前带小S标记");
		return super.superMan;
	}
}



public class SuperMan {
	
	String body;

	String specialTalent;

	String specialSymbol;

	public void setBody(String body) {
		this.body = body;
	}

	public void setSpecialTalent(String specialTalent) {
		this.specialTalent = specialTalent;
	}

	public void setSpecialSymbol(String specialSymbol) {
		this.specialSymbol = specialSymbol;
	}

	public String getSpecialTalent() {
		return specialTalent;
	}

	public String getBody() {
		return body;
	}

	public String getSpecialSymbol() {
		return specialSymbol;
	}
}

建造奔驰、宝马、混合型汽车 例子



//定义描述汽车的接口
public interface ICar {
	//有轮子
	void String getWheel();

	//有引擎
	void String getEngine();
}

//蓝图/设计稿
//你要建造一辆车必须有设计稿或蓝图,否则怎么生产?
//它知道我们的产品生产,而不是一个具体的产品。
public class Blueprint {
	
	//车轮
	private String wheel;

	//引擎
	private String engine;

	public Blueprint(String wheel, String engine) {
		this.wheel = wheel;
		this.engine = engine;
	}

	public void setWheel(String wheel) {
		this.wheel = wheel;
	}

	public void setEngine(String engine) {
		this.engine = engine;
	}

	public String getWheel() {
		return wheel;
	}

	public String getEngine() {
		return engine;
	}
}



//汽车的描述类
//Car定义产品的的属性,明确对产品的描述。因为我们的产品是比较抽象的,它没有指定
//引擎的型号,也没有指定车轮的牌子,那么这样的组合方式有很多,完全要靠建造者来建
//造
public class Car implement ICar {
	
	//汽车引擎
	private String engine;

	//轮子
	private String wheel

	public Car(String engine, String wheel) {
		this.engine = engine;
		this.wheel = wheel;
	}

	public void setEngine(String engine) {
		this.engine = engine;
	}

	public void setWheel(String wheel) {
		this.wheel = wheel;
	}

	public String getEngine() {
		return engine;
	}

	public String getWheel() {
		return wheel;
	}

	@Override
	public String toString() {
		System.out.println(" engine " + engine + “ wheel ” + wheel);
	}
}

//汽车的建造者
//建造者对于一个具体的产品来说是绝对的权威
public abstract class CarBuilder {
	
	//待建造的汽车
	private ICar car;
	//设计蓝图
	private Blueprint bp;

	public Car buildCar() {
		return new Car(buildWheel(), buildEngine());
	}

	//接收一份设计蓝图
	public void receiveBlueprint(Blueprint blueprint) {
		this.bp = blueprint;
	}

	//只有真正的建造者才能看到设计蓝图
	protected Blueprint getBlueprint() {
		return bp;
	}

	//建造车轮
	public String buildWheel();

	//建造引擎
	public String buildEngine();


	
}


//宝马汽车建造者
public class BMWBuilder extends CarBuilder {
	
	public String buildWheel() {
		return super.getBlueprint().getWheel();
	}

	public String buildEngine() {
		return super.getBlueprint().getEngine();
	}

}

//奔驰汽车建造者	
public class BenzBuilder extends CarBuilder {
	
	public String buildWheel() {
		return super.getBlueprint().getWheel();
	}

	public String buildEngine() {
		return super.getBlueprint().getEngine();
	}

}

public class Director {
	
	private CarBuilder bmwBuilder = new BMWBuilder();

	private CarBuilder benzBuilder = new BenzBuilder();

	//生产出一辆宝马商务车
	public ICar createBMWVan() {
		return createCar("BMW引擎", "BMW轮胎", bmwBuilder);

	}

	//生产出一辆奔驰商务车
	public ICar createBenzVan() {
		return createCar("Benz引擎", "Benz轮胎", benzBuilder);

	}

	//生产出一辆混合车型
	public ICar createComplexCar() {
		return createCar("Benz引擎", "BMW轮胎", benzBuilder);
	}

	private ICar createCar(String wheel, String engine, CarBuilder carBuilder) {
		Blueprint blueprint = new Blueprint(wheel, engine);

		return bmwBuilder.receiveBlueprint(blueprint).buildCar(); 
	}
}

public class Client {

	public static void main(String[] arg) {

		Director director = new Director();

		director.createBMWVan();

		director.createBenzVan();
		
		director.createComplexCar();
	}
	


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值