Design Pattern学习笔记 --- Builder(生成器)模式

Builder(生成器)模式属于对象建立型模式;设计模式

㈠意图:ide

  将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示.post

  --GOF设计模式.测试

㈡理解:ui

  一样的构建过程:意即在构建复杂对象的时候,所建立这个复杂对象的过程是不变的;this

  好比:准备一个美味的菜肴;通常都须要通过如下三个过程;spa

  ①处理原材料(若是是青菜就须要处理一些烂叶子;荤菜就要杀生了.)设计

  ②加工处理(或炒,或煮,或蒸)对象

  ③加调料,完工.接口

  与它的表示相分离:意思是指将构建的过程从具体复杂对象中抽取出来;不和每一个具体地复杂对象相绑定.

   例如:作青菜时,只包含这三个步骤的具体实现;而并不包括;这三个步骤的前后顺序.

㈢UML图:

 

㈣参与者:

  ①Builder

   -- 指定了建立一个复杂对象中各个部件(部分)的抽象接口

  ②ConcreteBuilder

   -- 实现了Builder接口中构造各个部件的具体方法;

   -- 定义并明确它所建立的具体的对象是什么(Product)

   -- 提供一个获取最终生成复杂对象的接口方法(getResult).

  ③Direct(导向器)

    -- 构造一个使用Builder接口的对象;并组合这个对象的生成具体部件的方法;并最终通知Builder构建完最终的复杂对象.

  ④Product

    -- 最终的复杂对象.

㈤协做关系:

㈥代码表示:

 

  
  
  
  
  1. /** 
  2.  * 产品 
  3.  */ 
  4. package com.skywares.designpattern.builder; 
  5.  
  6. /** 
  7.  * @author hubert 
  8.  * 
  9.  */ 
  10. public class FishFood { 
  11.     public FishFood() 
  12.     { 
  13.         System.out.println("fish food !!"); 
  14.     } 

 

  
  
  
  
  1. /** 
  2.  * Builder模式中的Builder角色; 
  3.  */ 
  4. package com.skywares.designpattern.builder; 
  5.  
  6. /** 
  7.  * @author hubert 
  8.  * 
  9.  */ 
  10. public interface FoodBuilder 
  11.     void prepareFood(); 
  12.     void handleFood(); 
  13.     void postFood(); 
  14.     FishFood getFood(); 

 

  
  
  
  
  1. /** 
  2.  * Builder模式中的具体Builder角色 
  3.  */ 
  4. package com.skywares.designpattern.builder; 
  5.  
  6. /** 
  7.  * @author hubert 
  8.  * 
  9.  */ 
  10. public class FishFoodBuilder implements FoodBuilder { 
  11.  
  12. //  private FishFood fishFood; 
  13.      
  14.     @Override 
  15.     public void prepareFood() { 
  16.         System.out.println(" 太可怜了!!请保护动物 "); 
  17.     } 
  18.  
  19.     @Override 
  20.     public void handleFood() { 
  21.         System.out.println(" 清蒸吗? "); 
  22.     } 
  23.  
  24.     @Override 
  25.     public void postFood() { 
  26.         System.out.println(" 伤口上撒盐!? "); 
  27.     } 
  28.      
  29.     public FishFood getFood() 
  30.     { 
  31.         return new FishFood(); 
  32.     } 
  33.  

 

  
  
  
  
  1. /** 
  2.  * Director角色 
  3.  */ 
  4. package com.skywares.designpattern.builder; 
  5.  
  6. /** 
  7.  * @author hubert 
  8.  * 
  9.  */ 
  10. public class FoodDirector { 
  11.      
  12.     private FoodBuilder foodBuilder; 
  13.      
  14.     public FoodDirector(FoodBuilder foodBuilder) 
  15.     { 
  16.         this.foodBuilder = foodBuilder; 
  17.     } 
  18.      
  19.     public FishFood constructFood() 
  20.     { 
  21.         foodBuilder.prepareFood(); 
  22.         foodBuilder.handleFood(); 
  23.         foodBuilder.postFood(); 
  24.         return foodBuilder.getFood(); 
  25.     } 
  26.  

 

  
  
  
  
  1. /** 
  2.  * 测试类 
  3.  */ 
  4. package com.skywares.designpattern.builder; 
  5.  
  6. /** 
  7.  * @author hubert 
  8.  * 
  9.  */ 
  10. public class Client { 
  11.  
  12.     /** 
  13.      * @param args 
  14.      */ 
  15.     public static void main(String[] args) { 
  16.         FoodBuilder foodBuiler = new FishFoodBuilder(); 
  17.         FoodDirector foodDirector = new FoodDirector(foodBuiler); 
  18.         foodDirector.constructFood(); 
  19.     } 
  20.  

 后记:

  Builder模式和Template Method模式有点像;主要表如今建立对象或者方法处理的步骤的部分.

  可是:Template method属于类行为模式;它主要是封装一些相同的类行为,将一些不肯定的类行为方式延迟到子类进行实现;

  而Builder模式属性对象建立模式;它的主要做用是解决如何建立一个复杂对象的问题;并让这个复杂对象建立的过程与其对应的每一个部件的建立过程进行解耦.

  给出的例子有点不恰当.若是是组装一部汽车什么的可能会更合适一点.

相关文章
相关标签/搜索