zoukankan      html  css  js  c++  java
  • 【设计模式】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
  • 相关阅读:
    可以将class文件反编译成java文件
    软件开发者面试百问
    马云说
    反编译工具jad的使用(将*.class文件变成*.java文件,附带jad.zip包)[转]
    Rose与PowerDesigner:两款建模工具对比分析比较[转]
    Javascript中最常用的55个经典技巧
    如何将.class文件转换成.java文件——JAVA反编译工具总结[转]
    SQL Server补丁版本的检查
    SQL Server 2000 从哪里看是哪个版本
    什么是模式?什么是框架?软件为什么要分层?
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12821729.html
Copyright © 2011-2022 走看看