美文网首页
设计模式之建造者模式

设计模式之建造者模式

作者: Kevin_小飞象 | 来源:发表于2019-04-02 17:05 被阅读0次

    定义

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

    Android 源码中的 Builder 模式

    AlertDialog.Builder,Android流行的图片加载库,以及Notification通知的实例化

    new AlertDialog
       .Builder(this)
       .setTitle("标题")
       .setMessage("内容")
       .setNegativeButton("取消", new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
                //...
           }
       })
       .setPositiveButton("确定", new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
                //....
           }
       })
       .create()
       .show();
    
    

    特点

    • 优点:

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

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

    应用场景

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

    实现

    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();
    

    相关文章

      网友评论

          本文标题:设计模式之建造者模式

          本文链接:https://www.haomeiwen.com/subject/vdngbqtx.html