建造者模式Demo

建造者模式:用一个指挥者去包装建造的所需部件,只暴露需要建造什么类型的东西,然后调用建造方法就能创建出来了;(一个类一个东西)

建造者类:(人需要头,身,手,脚)

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();
    }
}

结果:

我要一个胖子
肥身
肥脚
肥手
肥头
==============================
我要一个瘦子
瘦身
瘦脚
瘦手
瘦头

建造者模式可以屏蔽掉建造的内部细节,指定建造的是什么就直接出来了,一个萝卜一个坑,如果需要增加萝卜就再挖坑,所以建造的东西一定要具有代表性才有意义,不然总是要去修改建造的细节或者说建造很多的“各种各样的人”;

猜你喜欢

转载自my.oschina.net/u/3477913/blog/1490773