设计模式(3)Builder模式

定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

使用场景

  • 相同的方法,不同的执行顺序,产生不同的事件结果时。
  • 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
  • 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个使用建造者模式非常适合。
  • 当初始化一个对象特别复杂时,如参数多,且很多参数有默认值。

简单实现

public interface Builder {
  //创建部件A  比如创建汽车车轮
  void buildPartA(); 
  //创建部件B   比如创建汽车方向盘
  void buildPartB(); 
  //创建部件C   比如创建汽车发动机
  void buildPartC();
  //返回最后组装成品结果 (返回最后装配好的汽车)
  Product getResult();
}

//Director 类,负责制造
public class Director {

  private Builder builder;

  public Director( Builder builder ) {
    this.builder = builder;
  }

  // 将部件partA partB partC最后组成复杂对象
  //这里是将车轮 方向盘和发动机组装成汽车的过程
  public void construct() {
    builder.buildPartA();
    builder.buildPartB();
    builder.buildPartC();
  }
}

public class ConcreteBuilder implements Builder {
  Part partA, partB, partC;

  public void buildPartA() {
    //这里是具体如何构建partA的代码
  };
  public void buildPartB() { 
    //这里是具体如何构建partB的代码
  };
   public void buildPartC() { 
    //这里是具体如何构建partB的代码
  };
   public Product getResult() { 
    //返回最后组装成品结果
  };
}

public interface Product { }  //产品

public interface Part { }  //部件

//调用
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director(builder);

director.construct();
Product product = builder.getResult();

从上面可以看到由于Director封装了构建复杂的产品对象过程,对外隐藏了细节。

现实开发中,Director一般被省略。而直接使用一个Builder来进行对象的组装,这个Builder通常为链式调用,每个调用方法返回自身引用。代码大致如下:

new TestBuilder().methodA("A").methodB("B").create();

Android源码中的Builder模式

  • AlertDialog.Builder
  • OKHttp/Glide

总结

优点:

(1)良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成细节。
(2)建造者独立,容易扩展。

缺点:

(1)会产生多余的Builder对象及Director对象,消耗内存。

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/12/design-pattern-builder-mode/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
设计模式(3)Builder模式
定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 使用场景 相同的方法,不同的执行顺序,产生不同的事件结果时。 多个……
<<上一篇
下一篇>>
文章目录
关闭
目 录