设计模式之建造模式Builder

建造(Builder)模式属于对象的创建模式。

1. 定义

      建造模式将一个产品的内部表象与产品生成过程分割出来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

 

2. 使用的原因

     是为了将构建复杂对象的过程和它的部件解耦。

 

3. 适用的情况

      建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件和责任分割开来,达到责任划分和封装的目的。

 

4. 各类的说明如下:

         i)抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的构造;

         ii)具体建造者(ConcretBuilder)角色:它在应用程序的调用下创建产品的实例。完成任务为;

              a)  实现抽象建造者Builder接口,给出一步步完成创建产品实例的操作;

              b)  在创建完成后,提供产品的实例。

         iii) 导演者(Director角色):调用具体建造者角色以创建产品对象;

         iv)产品(Product)角色:建造中的复杂对象。一般情况下,一个系统不止一个产品类。

 

5. 应用举例

        以下实例建造一所Amigo想要的一所房子,呵呵,初中时的梦想:)

        一所小小的竹子做成的房子,满屋挂满风铃,有一个茶几,坐落在山上。

     1) 需求分析

        Amigo的这所房子的建造跟我们讨论的建造模式很是相关哦,竹子、风铃、茶几相当于我们所说的“零件”  ,最后建造成的房子相当于Amigo梦寐以求的竹房。呵呵,我们开始建造吧,完成Amigo的梦想!

 i)我们首先建立一个接口Builder,它定义如何创建我想要的房子的各个组成部分:

 

public interface Builder Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

 //创建想要的竹子

 void buildBamboo();

 //创建风铃

  void buildWindbell();

  

  //创建茶几

  void buildTeapoy();

 

  //返回最后建造好的房子

  //房子的组装过程不在这里进行,而是转移到Director中进行,从而实现了解耦过程和部件

  House getHouse();

}

 

 

  ii)Director类将竹子、风铃、茶几最后组装成我的full house

 

public class Director Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

    private Builder builder;

    

    public Director(Builder builder) Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

    this.builder = builder;

    } 

 

    /** *//**

      * 该方法组装我的full house

      */

    public void construct() Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

    builder.buildBamboo();

        builder.buildWindbell();  

        builder.buildTeapoy();  

    }

}

 

 

iii)具体建造器,茶几等怎么建造成的?我这样的懒人是不会知道的了,到时候请人吧。

 

public class ConcreteBuilder implements Builder Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

   public void buildBamboo() Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

       //让别人去做吧,我去数工钱了

    }

 

    public void buildWindbell() Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

       //同上

     }

 

    public void buildTeapoy() Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

       //同上

     }

 

     public House getHouse() Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

     }

}

 

 

iv)House类

 

public class House Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣{

}

 

 v) 下面来看看如何使用Builder模式来创建我的竹房,呵呵。

          

Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣ConcreteBuilder builder = new ConcreteBuilder();

Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣Director director = new Director(builder);

Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣director.construct();

Builder设计模式 - is01zyf - 普天之下,莫非王土 率土之兵,莫非王臣House house = builder.getHouse();

       :),建得差不多吧,还差点什么呢,以后慢慢想咯。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值