1. 程式人生 > >建造者模式學習以及與工廠模式的區別

建造者模式學習以及與工廠模式的區別

設計模式之禪學習——建造者模式

一、建造者模式是將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

二、建造者模式與工廠模式的區別:

             工廠模式一般都是建立一個產品,注重的是把這個產品創建出來就行,只要創建出來,不關心這個          產品的組成部分。從程式碼上看,工廠模式就是一個方法,用這個方法就能生產出產品。

             建造者模式也是建立一個產品,但是不僅要把這個產品創建出來,還要關係這個產品的組成細節,          組成過程。從程式碼上看,建造者模式在建造產品時,這個產品有很多方法,建造者模式會根據這些相同          方法但是不同執行順序建造出不同組成細節的產品。

            可以比較兩個模式的example程式碼,一比較就會比較出來,工廠模式關心整體,建造者模式關心細節。

三、建造者模式程式碼

1、建造者模式用於建造產品,其產品類一般都是一個模板(模板設計模式),所以一定會有產品類:

Java程式碼  收藏程式碼
  1. package com.wang.builderPattern;  
  2. /** 
  3.  * 產品類,通常實現了模板方法設計模式 
  4.  * @author HeJW 
  5.  * 
  6.  */  
  7. public class Product {  
  8.     //獨立業務處理,一般會有多個業務方法,  
  9.     //根據這些方法不同實現細節,  
  10.     //體現出建造者模式的用處  
  11.     public
     void doSomething(){  
  12.         System.out.println("");  
  13.     }  
  14. }     

2、抽象建造者,這個建造者會定義產品的不同部分以及其他產品定義的細節問題,然後根據這些細節建造產品:

Java程式碼  收藏程式碼
  1. package com.wang.builderPattern;  
  2. /** 
  3.  * 抽象建造者 
  4.  * @author HeJW 
  5.  * 
  6.  */  
  7. public abstract class Builder {  
  8.     //設定產品的不同部分,以獲得不同產品  
  9.     public abstract void setPart();  
  10.     //建造產品  
  11.     public
     abstract Product builderProduct();  
  12. }  

3、具體的建造者,在具體的建造者中,一定會有一個產品的物件,通過對這個產品物件的組成部分定義,建造出具體不同細節的產品:

Java程式碼  收藏程式碼
  1. package com.wang.builderPattern;  
  2. /** 
  3.  * 具體建造者 
  4.  * @author HeJW 
  5.  * 
  6.  */  
  7. public class ConcerteProduct extends Builder {  
  8.     private Product product = new Product();  
  9.     //設定產品零件  
  10.     @Override  
  11.     public void setPart() {  
  12.         /** 
  13.          * 產品類內的邏輯處理 
  14.          */  
  15.     }  
  16.     @Override  
  17.     public Product builderProduct() {  
  18.         return product;  
  19.     }  
  20. }  

4、導演類,這個類就是建造出可能出現的、具有不同細節的產品的建造者的集合,只要在客戶端有導演類的例項,並且告訴導演類我要什麼樣的產品,導演類就會返回這個產品:

Java程式碼  收藏程式碼
  1. package com.wang.builderPattern;  
  2. /** 
  3.  * 導演類 
  4.  * @author HeJW 
  5.  * 
  6.  */  
  7. public class Director {  
  8.     private Builder builder = new ConcerteProduct();  
  9.     //構造不同的產品  
  10.     public Product getProduct(){  
  11.         /* 
  12.          * 設定不同的零件,產生不同的產品 
  13.          */  
  14.         builder.setPart();  
  15.         return builder.builderProduct();  
  16.     }  
  17. }  

在客戶端建造產品時:

Java程式碼  收藏程式碼
  1. package com.wang.builderPattern;  
  2. public class App {  
  3.     public static void main(String[] args) {  
  4.         Director productDirector = new Director();  
  5.         Product p = productDirector.getProduct();  
  6.         //...  
  7.     }  
  8. }  

最後,只要記住,建造者模式是 適合建造具體細節的產品的設計模式就可以了。。。。。。

附上設計模式之禪這本書的建造者模式的例項程式碼(是以建造car為例的)