標籤:style blog ar color os sp on div art
建造者模式:像是模板方法模式的升級。也叫產生器模式。將一個複雜物件的構造與它的表示分離,使得同樣的構建過程可以建立不同的表示。其實就是建立一大類的東西, 但是具體又有些差異。
在建造者模式中,一般有四個角色:
1,Product產品類。
該類一般實現了模板方法模式。
2,Builder抽象的建造者。
規範產品的組建,一般是由子類實現。
3,ConcreteBuilder具體的建造者。
實現抽象類別定義的所有方法,並且可以返回一個組建好的具體對象。
4,Director導演類(一般是包涵多種具體產品差異的方法)。
大致範例程式碼:
Product類:
1 package com.yemaozi.builderpattern;2 3 public abstract class Product {4 //一般實現模板方法的抽象類別。5 }
具體的Product類:
//ProductApackage com.yemaozi.builderpattern;public class ProductA extends Product{ public void doSomething(){ }}//ProductBpackage com.yemaozi.builderpattern;public class ProductB extends Product{ public void doSomethding(){ }}
建造器:
1 package com.yemaozi.builderpattern;2 3 public interface Builder {4 //設定產品不同的方法5 public abstract void setPart();6 //構建產品7 public abstract Product builderProduct();8 }
具體的建造器,具體的建造器個數與具體產品類的數目一致。
1 //ConcreteBuilderA 2 package com.yemaozi.builderpattern; 3 4 public class ConcreteBuilderA implements Builder{ 5 6 Product p = new ProductA(); 7 8 public void setPart() { 9 }10 11 public Product builderProduct() {12 return p;13 }14 }15 //ConcreteBuilderB16 package com.yemaozi.builderpattern;17 18 public class ConcreteBuilderB implements Builder{19 20 Product p = new ProductB();21 22 public void setPart() {23 }24 25 public Product builderProduct() {26 return p;27 }28 }
導演類:導演類一般是為了預設定不同產品差異的,若是想得到對應的產品,直接到Director裡擷取,因為,該類就是為了生產出所有的產品,以供擷取。導演類一般可以有多個。
1 package com.yemaozi.builderpattern; 2 3 public class Director { 4 private Builder b1 = new ConcreteBuilderA(); 5 private Builder b2 = new ConcreteBuilderB(); 6 //構建A產品 7 public Product getProductA(){ 8 b1.setPart(); 9 Product p = b1.builderProduct();10 return p;11 }12 //構建B產品13 public Product getProductB(){14 b2.setPart();15 return b2.builderProduct();16 }17 }
此外,建造者模式還有一個重要的角色,就是零件(理解為產品類裡的方法),建造者是通過零件的組裝來建立對象。組裝順序不同(調用方法順序不同),建造的對象就會有著差異,也是,建造者模式要表達的核心意義。說白了,建造者最主要的功能是基本方法的調用順序的安排。
和原廠模式的差異:
Factory 方法模式重點是建立。建立零件是它的主要職責,組裝順序不是它關心的。
建造者模式重點是對已產生的零件進行組裝。從而也達到建立對象的效果。
23種設計模式----------建造者模式