zoukankan      html  css  js  c++  java
  • 建造者模式 (学习笔记6)

    原文地址:http://c.biancheng.net/view/1354.html

    什么时候用:

    1. 一个复杂的对象
    2. 该对象构造过程由多个部分组成
    3. 各部分的构造是有先后顺序的

    主要角色:

    1. 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件。
    2. 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
    3. 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
    4. 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。

    结构图:

    image

    示例代码:

    1. 产品角色
    2. class Product {
          private String partA;
          private String partB;
          private String partC;
      
          public void setPartA(String partA) {
              this.partA = partA;
          }
      
          public void setPartB(String partB) {
              this.partB = partB;
          }
      
          public void setPartC(String partC) {
              this.partC = partC;
          }
      
          public void show() {
              //显示产品的特性
          }
      }
    3. 抽象建造者
    4. abstract class Builder {
          //创建产品对象
          protected Product product = new Product();
      
          public abstract void buildPartA();
      
          public abstract void buildPartB();
      
          public abstract void buildPartC();
      
          //返回产品对象
          public Product getResult() {
              return product;
          }
      }
    5. 具体建造者
    6. public class ConcreteBuilder extends Builder {
          public void buildPartA() {
              product.setPartA("建造 PartA");
          }
      
          public void buildPartB() {
              product.setPartB("建造 PartB");
          }
      
          public void buildPartC() {
              product.setPartC("建造 PartC");
          }
      }
    7. 指挥者
    8. class Director {
          private Builder builder;
      
          public Director(Builder builder) {
              this.builder = builder;
          }
      
          //产品构建与组装方法
          public Product construct() {
              builder.buildPartA();
              builder.buildPartB();
              builder.buildPartC();
              return builder.getResult();
          }
      }
    9. 调用者
    10. public class Client {
          public static void main(String[] args) {
              Builder builder = new ConcreteBuilder();
              Director director = new Director(builder);
              Product product = director.construct();
              product.show();
          }
      }


  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/huiy/p/15556403.html
Copyright © 2011-2022 走看看