建造者模式

又叫生成器模式,它可以将复杂对象的建造过程抽象出来,然后把这个抽象过程个性化的任务交给子类。用户只需要指定个性化类型即可,不需要内部的具体构建细节。

它有四个roles :
(1)Client (用户)
(2)Builder (抽象建造者)
(3)ConcreteBuilder (具体建造者)
(4)Director (指挥者)构建一个使用Builder接口的对象,隔离了客户与对象的生产过程,负责控制产品对象的生产过程。

Builder模式的UML:
图片说明

举个栗子:
有家面馆有两个厨师,一个负责炒面,一个负责蒸面,实现顾客点餐的功能。
此时,服务员帮顾客点餐就是Director,两个负责具体功能的厨师就是ConcreteBuilder,共同继承Builder接口或抽象类,而顾客就是我们测试时的Main类。


代码实现:

public abstract class NoodleBuilder {
    public  abstract void buildPart1();
    public abstract void buildPart2();
}

//具体的构建者
public class FriedNoodleBuilder extends NoodleBuilder{
    @Override
    public void buildPart1() {
        System.out.println("准备牛肉,面");
    }

    @Override
    public void buildPart2() {
        System.out.println("炒面");
    }
}

public class SteamedNoodleBuilder extends NoodleBuilder{
    @Override
    public void buildPart1() {
        System.out.println("准备猪肉,面");
    }

    @Override
    public void buildPart2() {
        System.out.println("蒸面");
    }
}

public class Director {

    private NoodleBuilder builder;

    Director(NoodleBuilder builder){
        this.builder = builder;
    }

    public void construct(){
        builder.buildPart1();
        builder.buildPart2();
    }

}

public class Main {
    public static void main(String[] args) {
        //比如顾客现在想要牛肉炒面
        //我们找到服务员director,director就去找了炒面厨师FriedNoodleBuilder
        Director director = new Director(new FriedNoodleBuilder());
        //然后开始构建炒面
        director.construct();

    }
}

总结

代码中Director类是不知道Builder的具体实现子类的,一切按照客户的需求来。正是不知道才能够替换,正是因为能够替换,组件才具有高价值。