《大话设计模式》Java代码示例(八)之建造者模式
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
package builder;
/**
* 建造者模式(Builder)
* 建造者抽象类
*/
public abstract class PersonBuilder {
public abstract void buildHead();
public abstract void buildBody();
public abstract void buildArmLeft();
public abstract void buildArmRight();
public abstract void buildLegLeft();
public abstract void buildLegRight();
}
package builder;
/**
* 建造者模式(Builder)
* 大瘦建造类
*/
public class PersonThinBuilder extends PersonBuilder {
@Override
public void buildHead() {
System.out.println("我来组成头部【大瘦】");
}
@Override
public void buildBody() {
System.out.println("我来组成身体【大瘦】");
}
@Override
public void buildArmLeft() {
System.out.println("我来组成左臂【大瘦】");
}
@Override
public void buildArmRight() {
System.out.println("我来组成右臂【大瘦】");
}
@Override
public void buildLegLeft() {
System.out.println("我来组成左腿【大瘦】");
}
@Override
public void buildLegRight() {
System.out.println("我来组成右腿【大瘦】");
}
}
package builder;
/**
* 建造者模式(Builder)
* 小胖建造类
*/
public class PersonFatBuilder extends PersonBuilder {
@Override
public void buildHead() {
System.out.println("我来组成头部【小胖】");
}
@Override
public void buildBody() {
System.out.println("我来组成身体【小胖】");
}
@Override
public void buildArmLeft() {
System.out.println("我来组成左臂【小胖】");
}
@Override
public void buildArmRight() {
System.out.println("我来组成右臂【小胖】");
}
@Override
public void buildLegLeft() {
System.out.println("我来组成左腿【小胖】");
}
@Override
public void buildLegRight() {
System.out.println("我来组成右腿【小胖】");
}
}
package builder;
/**
* 建造者模式(Builder)
* 指挥者
*/
public class PersonDirector {
private PersonBuilder personBuilder;
public PersonDirector(PersonBuilder personBuilder) {
this.personBuilder = personBuilder;
}
public void createPerson() {
personBuilder.buildHead();
personBuilder.buildBody();
personBuilder.buildArmLeft();
personBuilder.buildArmRight();
personBuilder.buildLegLeft();
personBuilder.buildLegRight();
}
}
package builder;
/**
* 建造者模式(Builder)
* 客户端main方法
*/
public class Client {
public static void main(String[] args) {
System.out.println("【大瘦合体】");
PersonThinBuilder ptb = new PersonThinBuilder();
PersonDirector pdThin = new PersonDirector(ptb);
pdThin.createPerson();
System.out.println("【小胖合体】");
PersonFatBuilder pfb = new PersonFatBuilder();
PersonDirector pdFat = new PersonDirector(pfb);
pdFat.createPerson();
}
}
输出结果:
【大瘦合体】
我来组成头部【大瘦】
我来组成身体【大瘦】
我来组成左臂【大瘦】
我来组成右臂【大瘦】
我来组成左腿【大瘦】
我来组成右腿【大瘦】
【小胖合体】
我来组成头部【小胖】
我来组成身体【小胖】
我来组成左臂【小胖】
我来组成右臂【小胖】
我来组成左腿【小胖】
我来组成右腿【小胖】