【设计模式】8.建造者模式

建造者模式

  定义:建造者模式(Builder Pattern)(或叫生成器模式),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(只需要给出指定复杂对象的类型和内容)。用户不需知道对象的建造过程的细节就可以直接创建复杂的对象。

结构图:

Director:构建一个使用Builder接口的对象。

Builder:建造者,提供建造的具体方法的接口。

ConcreteBuilder:具体建造者,实现Builder接口。

Product:具体产品。

例:

public class House {      // Product
    private String style;
    private float cost;

    public House() {
    }

  // getter/setter省略
}
public interface Builder {   // Builder
    void buildHouse();
    House getHouese();
}
public class ConcreteBuilder1 implements Builder { // ConcreteBuilder1建造中式洋房的建造商
    private House house = new House();

    @Override
    public void buildHouse() {
        house.setStyle("中式洋房");
        house.setCost(100);
    }

    @Override
    public House getHouese() {
        return house;
    }
}
public class ConcreteBuilder2 implements Builder{ // ConcreteBuilder2建造西式洋房的建造商
    private House house = new House();

    @Override
    public void buildHouse() {
        house.setStyle("西式洋房");
        house.setCost(150);
    }

    @Override
    public House getHouese() {
        return house;
    }
}
public class Developer {    // Director
    public void build(Builder builder) { // 指挥具体建造商建造
        builder.buildHouse();
        builder.getHouese();
    }
}
public class Test {
    public static void main(String[] args){
        ConcreteBuilder1 concreteBuilder1 = new ConcreteBuilder1(); // 中式洋房建造商
        ConcreteBuilder2 concreteBuilder2 = new ConcreteBuilder2(); // 西式洋房建造商

        Developer developer = new Developer();  // 开发商

     // 开发商指挥中式洋房建造商建造(开发商不需要知道具体建造过程)
        developer.build(concreteBuilder1); 
        House house1 = concreteBuilder1.getHouese();
        System.out.println(house1.getStyle());
        System.out.println(house1.getCost());

     // 开发商指挥西式洋房建造商建造(开发商不需要知道具体建造过程)
        developer.build(concreteBuilder2); 
        House house2 = concreteBuilder2.getHouese();
        System.out.println(house2.getStyle());
        System.out.println(house2.getCost());

    }
}

输出:

中式洋房
100.0
西式洋房
150.0

猜你喜欢

转载自www.cnblogs.com/jiazhongxin/p/12821729.html