建造者模式學習以及與工廠模式的區別
阿新 • • 發佈:2019-01-03
設計模式之禪學習——建造者模式
一、建造者模式是將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
二、建造者模式與工廠模式的區別:
工廠模式一般都是建立一個產品,注重的是把這個產品創建出來就行,只要創建出來,不關心這個 產品的組成部分。從程式碼上看,工廠模式就是一個方法,用這個方法就能生產出產品。
建造者模式也是建立一個產品,但是不僅要把這個產品創建出來,還要關係這個產品的組成細節, 組成過程。從程式碼上看,建造者模式在建造產品時,這個產品有很多方法,建造者模式會根據這些相同 方法但是不同執行順序建造出不同組成細節的產品。
可以比較兩個模式的example程式碼,一比較就會比較出來,工廠模式關心整體,建造者模式關心細節。
三、建造者模式程式碼
1、建造者模式用於建造產品,其產品類一般都是一個模板(模板設計模式),所以一定會有產品類:
Java程式碼- package com.wang.builderPattern;
- /**
- * 產品類,通常實現了模板方法設計模式
- * @author HeJW
- *
- */
- public class Product {
- //獨立業務處理,一般會有多個業務方法,
- //根據這些方法不同實現細節,
- //體現出建造者模式的用處
- public
- System.out.println("");
- }
- }
2、抽象建造者,這個建造者會定義產品的不同部分以及其他產品定義的細節問題,然後根據這些細節建造產品:
Java程式碼- package com.wang.builderPattern;
- /**
- * 抽象建造者
- * @author HeJW
- *
- */
- public abstract class Builder {
- //設定產品的不同部分,以獲得不同產品
- public abstract void setPart();
- //建造產品
- public
- }
3、具體的建造者,在具體的建造者中,一定會有一個產品的物件,通過對這個產品物件的組成部分定義,建造出具體不同細節的產品:
Java程式碼- package com.wang.builderPattern;
- /**
- * 具體建造者
- * @author HeJW
- *
- */
- public class ConcerteProduct extends Builder {
- private Product product = new Product();
- //設定產品零件
- @Override
- public void setPart() {
- /**
- * 產品類內的邏輯處理
- */
- }
- @Override
- public Product builderProduct() {
- return product;
- }
- }
4、導演類,這個類就是建造出可能出現的、具有不同細節的產品的建造者的集合,只要在客戶端有導演類的例項,並且告訴導演類我要什麼樣的產品,導演類就會返回這個產品:
Java程式碼- package com.wang.builderPattern;
- /**
- * 導演類
- * @author HeJW
- *
- */
- public class Director {
- private Builder builder = new ConcerteProduct();
- //構造不同的產品
- public Product getProduct(){
- /*
- * 設定不同的零件,產生不同的產品
- */
- builder.setPart();
- return builder.builderProduct();
- }
- }
在客戶端建造產品時:
Java程式碼- package com.wang.builderPattern;
- public class App {
- public static void main(String[] args) {
- Director productDirector = new Director();
- Product p = productDirector.getProduct();
- //...
- }
- }
最後,只要記住,建造者模式是 適合建造具體細節的產品的設計模式就可以了。。。。。。
附上設計模式之禪這本書的建造者模式的例項程式碼(是以建造car為例的)