建造者模式:用一个指挥者去包装建造的所需部件,只暴露需要建造什么类型的东西,然后调用建造方法就能创建出来了;(一个类一个东西)
建造者类:(人需要头,身,手,脚)
public abstract class PersonBuilder {
public abstract void buildHead();
public abstract void buildBody();
public abstract void buildHand();
public abstract void buildFoot();
}
定义建造的细节,就是真实的什么样的人
胖子
public class FatPerson extends PersonBuilder {
@Override
public void buildHead() {
System.out.println("肥头");
}
@Override
public void buildBody() {
System.out.println("肥身");
}
@Override
public void buildHand() {
System.out.println("肥手");
}
@Override
public void buildFoot() {
System.out.println("肥脚");
}
}
瘦子
public class ThinPerson extends PersonBuilder {
@Override
public void buildHead() {
System.out.println("瘦头");
}
@Override
public void buildBody() {
System.out.println("瘦身");
}
@Override
public void buildHand() {
System.out.println("瘦手");
}
@Override
public void buildFoot() {
System.out.println("瘦脚");
}
}
一个指挥者(指挥建造什么类型的实例)
//指挥者去指挥建造什么样的人
public class PersonDirector {
private PersonBuilder personBuilder;
public PersonDirector(PersonBuilder personBuilder) {
this.personBuilder = personBuilder;
}
public void createPerson() {
personBuilder.buildBody();
personBuilder.buildFoot();
personBuilder.buildHand();
personBuilder.buildHead();
}
}
最后客户端去调用指挥者去造什么样的人
public class Client {
public static void main(String[] args) {
System.out.println("我要一个胖子");
FatPerson fatPerson = new FatPerson();
PersonDirector personDirector = new PersonDirector(fatPerson);
personDirector.createPerson();
System.out.println("==============================");
System.out.println("我要一个瘦子");
ThinPerson thinPerson = new ThinPerson();
PersonDirector thinPersonDirector = new PersonDirector(thinPerson);
thinPersonDirector.createPerson();
}
}
结果:
我要一个胖子
肥身
肥脚
肥手
肥头
==============================
我要一个瘦子
瘦身
瘦脚
瘦手
瘦头
建造者模式可以屏蔽掉建造的内部细节,指定建造的是什么就直接出来了,一个萝卜一个坑,如果需要增加萝卜就再挖坑,所以建造的东西一定要具有代表性才有意义,不然总是要去修改建造的细节或者说建造很多的“各种各样的人”;