求知 文章 文库 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. { 
  5.     @Override 
  6.     public String toString() { 
  7.         return "Product"; 
  8.     }  
  9. } 
  10.  
  11. interface Builder 
  12. { 
  13.     void BuildPart(); 
  14. } 
  15.  
  16. class ConcreteBuilder implements Builder 
  17. { 
  18.      
  19.     @Override 
  20.     public void BuildPart() { 
  21.         // TODO Auto-generated method stub 
  22.         System.out.println("Building Product's part"); 
  23.     } 
  24.      
  25.     public Product GetResult() 
  26.     { 
  27.         System.out.println("Product's Building has finished"); 
  28.         return new Product(); 
  29.           
  30.     } 
  31. } 
  32.  
  33. class Director 
  34. { 
  35.     public Product Construct(ConcreteBuilder cb) 
  36.     { 
  37.         cb.BuildPart(); 
  38.         return cb.GetResult(); 
  39.     } 
  40. } 
  41.  
  42. public class BuilderDemo { 
  43.  
  44.     /** 
  45.      * @param args 
  46.      */ 
  47.     public static void main(String[] args) { 
  48.         // TODO Auto-generated method stub 
  49.         Director d=new Director(); 
  50.         ConcreteBuilder cb=new ConcreteBuilder(); 
  51.         Product p=d.Construct(cb); 
  52.         System.out.println(p); 
  53.     } 
  54. } 

生活中的例子:

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

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

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



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


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


广汽研究院 SysML+EA+软件分析设计
高合汽车研发部门 建模工具EA、WebEA、
国汽智联 建模工具EA、模型库、WebEA
亿咖通 MBSE工程体系与工具链咨询
中航无人机 MBSE工具链
吉利汽车 购买EA工具
华科汽车零部件 购买EA工具
东风岚图汽车 购买EA工具 以及EA定制开发
更多...