建造超人的例子
建造成年超人及未成年超人实例代码
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();
}
}