建造者模式

2019-10-17  本文已影响0人  打工养老板
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

该模式的主要优点如下:
各个具体的建造者相互独立,有利于系统的扩展。
客户端不必知道产品内部组成的细节,便于控制细节风险。

其缺点如下:
产品的组成部分必须相同,这限制了其使用范围。
如果产品的内部变化复杂,该模式会增加很多的建造者类。

产品角色
/**
* 包含多个组成部件的复杂对象。
* 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。
* 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
* 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
* 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
**/
class Product {
  private String partA;
  private String partB;
  private String partC;
  public void setPartA(String partA) {
    this.partA = partA;
  }
  public void setPartA(String partB) {
    this.partA = partB;
  }
  public void setPartA(String partC) {
    this.partA = partC;
  }
  @Override
   public String toString() {
     return "Product {" +
                "partA='" + partA + '\'' +
                ", partB='" + partB + '\'' +
                ", partC='" + partC + '\'' +
                '}';
   }

  public void show() {
    System.out.println("展示产品:" + this.toString());
  }
}

抽象建造者

/**
* 包含创建产品各个子部件的抽象方法。
**/
abstract class Builder {
   protected Product product = new Product();
  public abstart void buildPartA();
  public abstart void buildPartB();
  public abstart void buildPartC();
  public Product getResult() {
    retrun product;
  }
}

public class ConcreteBuilder extends Builder {
  public void buidlerPartA() {
    product.setPartA("建造 PartA");
  }
  public void buidlerPartB() {
    product.setPartA("建造 PartB");
  }
  public void buidlerPartC() {
    product.setPartA("建造 PartC");
  }
}

指挥者

/**
* 调用建造者中的方法完成复杂对象的创建。
**/
class Director {
  private Builder builder;
  public Director(Builder builder) {
    this.builder = builder;
  }
  public Product construct() {
    builder.builderPartA();
    builder.builderPartB();
    builder.builderPartC();
    return builder.getResult();
  }
}

客户类

public class Client {
  public static void main(String[] args) {
    Builder builder = new ConcreteBuidler();
    Director director = new Directore(builder);
    Product product = director.constract();
    product.show()
  }
}

上一篇:抽象工厂模式
下一篇:代理模式
腾讯云双十一优惠链接

上一篇下一篇

猜你喜欢

热点阅读