求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
 
一天一个设计模式之建造者模式(Builder)

2010-09-07 作者:visionsky 来源:visionsky的blog

 

建造者模式,属于创建型模式,其目的在于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用情况:

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 当构造过程必须允许被构造的对象有不同的表示时。

类结构图如下所示

参与者

  • Builder
    — 为创建一个Product对象的各个部件指定抽象接口。
  • ConcreteBuilder
    — 实现Builder的接口以构造和装配该产品的各个部件。
    — 定义并明确它所创建的表示。
    — 提供一个检索产品的接口
  • Director
    — 构造一个使用Builder接口的对象。
  • Product
    — 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
    — 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

协作

  • 客户创建Director对象,并用它所想要的Builder对象进行配置。
  • 一旦产品部件被生成,导向器就会通知生成器。
  • 生成器处理导向器的请求,并将部件添加到该产品中。
  • 客户从生成器中检索产品

实现代码:

  1. package com.visionsky.DesignPattern; 
  2.  
  3. class Product 
  4.     @Override 
  5.     public String toString() { 
  6.         return "Product"
  7.     }  
  8.  
  9. interface Builder 
  10.     void BuildPart(); 
  11.  
  12. class ConcreteBuilder implements Builder 
  13.      
  14.     @Override 
  15.     public void BuildPart() { 
  16.         // TODO Auto-generated method stub 
  17.         System.out.println("Building Product's part"); 
  18.     } 
  19.      
  20.     public Product GetResult() 
  21.     { 
  22.         System.out.println("Product's Building has finished"); 
  23.         return new Product(); 
  24.           
  25.     } 
  26.  
  27. class Director 
  28.     public Product Construct(ConcreteBuilder cb) 
  29.     { 
  30.         cb.BuildPart(); 
  31.         return cb.GetResult(); 
  32.     } 
  33.  
  34. public class BuilderDemo { 
  35.  
  36.     /** 
  37.      * @param args 
  38.      */ 
  39.     public static void main(String[] args) { 
  40.         // TODO Auto-generated method stub 
  41.         Director d=new Director(); 
  42.         ConcreteBuilder cb=new ConcreteBuilder(); 
  43.         Product p=d.Construct(cb); 
  44.         System.out.println(p); 
  45.     } 

生活中的例子:

在这里我们以造汽车为例子,汽车是由个很复杂的对象,有很多个子对象组成,如轮胎,引擎,车架等,所以为了造好一辆汽车,其子对象必须具备。

  1. package com.visionsky.DesignPattern; 
  2.  
  3.  
  4. class Car{ 
  5.  
  6.     @Override 
  7.     public String toString() { 
  8.         return "汽车产品"
  9.     } 
  10.  
  11. interface  IBuilder 
  12.     void BuildWheel(); 
  13.     void BuildCarFrame(); 
  14.     void BuildEngine();  
  15.  
  16. class CarBuilder implements IBuilder 
  17.  
  18.     private Car car=new Car(); 
  19.     @Override 
  20.     public void BuildCarFrame() { 
  21.         // TODO Auto-generated method stub 
  22.         System.out.println("建造汽车框架"); 
  23.     } 
  24.  
  25.     @Override 
  26.     public void BuildEngine() { 
  27.         // TODO Auto-generated method stub 
  28.         System.out.println("建造汽车轮子"); 
  29.     } 
  30.  
  31.     @Override 
  32.     public void BuildWheel() { 
  33.         // TODO Auto-generated method stub 
  34.         System.out.println("建造汽车引擎"); 
  35.     } 
  36.      
  37.     public Car CarBuildOver() 
  38.     { 
  39.         System.out.println("汽车组装完毕"); 
  40.         return car; 
  41.     } 
  42.  
  43. class CarDirector 
  44.      
  45.     public Car BuildCar(CarBuilder cb) 
  46.     { 
  47.         cb.BuildCarFrame(); 
  48.         cb.BuildEngine(); 
  49.         cb.BuildWheel(); 
  50.         return cb.CarBuildOver(); 
  51.     } 
  52.  
  53. public class BuliderDemoInLife { 
  54.  
  55.     /** 
  56.      * @param args 
  57.      */ 
  58.     public static void main(String[] args) { 
  59.         // TODO Auto-generated method stub 
  60.         CarDirector cd=new CarDirector(); 
  61.         Car c=cd.BuildCar(new CarBuilder()); 
  62.         System.out.println(c); 
  63.     } 

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://visionsky.blog.51cto.com/733317/385196



如何向妻子解释OOD
OOAD与UML笔记
UML类图与类的关系详解
UML统一建模语言初学
总结一下领域模型的验证
基于 UML 的业务建模


面向对象的分析设计
基于UML的面向对象分析设计
UML + 嵌入式系统分析设计
关系数据库面向OOAD设计
业务建模与业务架构
使用用例进行需求管理


某航空IT部门 业务分析与业务建模
联想 业务需求分析与建模
北京航管科技 EA工具与架构设计
使用EA和UML进行嵌入式系统分析
全球最大的茶业集团 UML系统分析
华为 基于EA的嵌入式系统建模
水资源服务商 基于EA进行UML建模
更多...