• 【设计模式】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
  • 相关阅读:
    Java面向对象设计——购物车·
    查找

    栈和队列
    指针
    数组
    第四次博客——函数
    第三次博客作业
    第二次博客作业
    Java购物车大作业01
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12821729.html
Copyright © 2020-2023  润新知