首页 > 其他 > 详细

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

时间:2020-05-03 14:05:09      阅读:39      评论:0      收藏:0      [点我收藏+]

建造者模式

  定义:建造者模式(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

 

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

原文:https://www.cnblogs.com/jiazhongxin/p/12821729.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!