posts - 297,  comments - 1618,  trackbacks - 0
     建造(Builder)模式属于对象的创建模式
1. 定义
      建造模式将一个产品的内部表象与产品生成过程分割出来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
 2. 使用的原因
     是为了将构建复杂对象的过程和它的部件解耦。
 3. 适用的情况
      建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件和责任分割开来,达到责任划分和封装的目的。
4. 类图结构及其说明
     1)
建造模式的类图如下所示:
      
      2)各类的说明如下:
         i)抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的构造;
         ii)具体建造者(ConcretBuilder)角色:它在应用程序的调用下创建产品的实例。完成任务为;
              a)  实现抽象建造者Builder接口,给出一步步完成创建产品实例的操作;
              b)  在创建完成后,提供产品的实例。
         iii) 导演者(Director角色):调用具体建造者角色以创建产品对象;
         iv)产品(Product)角色:建造中的复杂对象。一般情况下,一个系统不止一个产品类。
5. 应用举例
        以下实例建造一所Amigo想要的一所房子,呵呵,初中时的梦想:)
        一所小小的竹子做成的房子,满屋挂满风铃,有一个茶几,坐落在山上。
     1) 需求分析
        Amigo的这所房子的建造跟我们讨论的建造模式很是相关哦,竹子、风铃、茶几相当于我们所说的“零件”  ,最后建造成的房子相当于Amigo梦寐以求的竹房。呵呵,我们开始建造吧,完成Amigo的梦想!
         i)我们首先建立一个接口Builder,它定义如何创建我想要的房子的各个组成部分:
            
public interface Builder {
  
//创建想要的竹子
  void buildBamboo();

  
//创建风铃
  void buildWindbell();
  
  
//创建茶几
  void buildTeapoy();
 
  
//返回最后建造好的房子
  
//房子的组装过程不在这里进行,而是转移到Director中进行,从而实现了解耦过程和部件
  House getHouse();
}

        ii)Director类将竹子、风铃、茶几最后组装成我的full house
    
public class Director {
    
private Builder builder;
    
    
public Director(Builder builder) {
    
this.builder = builder;
    }
 

    
/**
      * 该方法组装我的full house
      
*/

    
public void construct() {
    builder.buildBamboo();
        builder.buildWindbell();  
        builder.buildTeapoy();  
    }

}
      iii)具体建造器,茶几等怎么建造成的?我这样的懒人是不会知道的了,到时候请人吧。
 
public class ConcreteBuilder implements Builder {
   
public void buildBamboo() {
       
//让别人去做吧,我去数工钱了
    }


    
public void buildWindbell() {
       
//同上
     }


    
public void buildTeapoy() {
       
//同上
     }


     
public House getHouse() {
     }

}

      
       iv)House类
            
public class House {
}

       v) 下面来看看如何使用Builder模式来创建我的竹房,呵呵。
          
ConcreteBuilder builder = new ConcreteBuilder();
Director director 
= new Director(builder);
director.construct();
House house 
= builder.getHouse();

       :),建得差不多吧,还差点什么呢,以后慢慢想咯。
参考书籍:《Java与模式》
                    《Patterns in Java》

 

posted on 2007-03-18 23:27 阿蜜果 阅读(4576) 评论(9)  编辑  收藏 所属分类: Design Pattern


FeedBack:
# re: 设计模式学习笔记--建造模式(Builder)
2007-03-19 09:10 | Tortoise
支持!你好用功呀!~  回复  更多评论
  
# re: 设计模式学习笔记--建造模式(Builder)
2007-03-19 11:54 | Tortoise
好经典呀。就是不知道干吗要这样设计  回复  更多评论
  
# re: 设计模式学习笔记--建造模式(Builder)
2007-03-20 10:46 | zhyiwww
讲的简单易懂。基本上明白了,还需要人深入的学习和实践。  回复  更多评论
  
# re: 设计模式学习笔记--建造模式(Builder) [未登录]
2007-03-20 13:21 | 阿蜜果
呵呵,努力学习设计模式中,up下篇,template模式  回复  更多评论
  
# re: 设计模式学习笔记--建造模式(Builder)
2008-01-08 12:29 | hbyufan@hotmail.com
一所小小的竹子做成的房子,满屋挂满风铃,有一个茶几,坐落在山上。  回复  更多评论
  
# re: 设计模式学习笔记--建造模式(Builder) [未登录]
2009-02-10 14:28 | bean
ConcreteBuilder builder = new ConcreteBuilder();
最好用接口声明  回复  更多评论
  
# re: 设计模式学习笔记--建造模式(Builder)
2009-12-21 15:44 | xiaoyang818
ConcreteBuilder builder = new ConcreteBuilder();

最好改成

Builder builder = new ConcreteBuilder();
  回复  更多评论
  
# re: 设计模式学习笔记--建造模式(Builder)
2011-03-17 11:20 | fxbird
都是些人云亦云的家伙,请问博主,你能说出建造模式和构造函数有什么区别吗?建造的时候难道不需要参数吗,哪有不需要参数就能构造出的东西。  回复  更多评论
  
# re: 设计模式学习笔记--建造模式(Builder) [未登录]
2012-09-24 12:06 | C
@xiaoyang818
+1  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
      玩转Axure RP  (2015年12月出版)
      

      Power Designer系统分析与建模实战  (2015年7月出版)
      
     Struts2+Hibernate3+Spring2   (2010年5月出版)
     

留言簿(262)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2286196
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜