建造者模式(生成器模式)
一、定義
將一個複雜對象的構造與它的表示分離,使得同樣的構建過程可以創建不同的表示
建造者模式通用類圖
建造者模式源碼
-
產品類
public class Product { public void doSomething(){ //獨立業務處理 } }
-
抽象建造者
public abstract class Builder { //設置產品的不同部分,以獲得不同的產品 public abstract void setPart(); //建造產品 public abstract Product buildProduct(); }
-
具體建造者
public class ConcreteBuilder extends Builder { private Product product = new Product(); //設置產品零件 public void setPart(){ /* * 產品類內的邏輯處理 */ } //組建一個產品 public Product buildProduct() { return product; } }
-
導演類
public class Director { private Builder builder = new ConcreteProduct(); //構建不同的產品 public Product getAProduct(){ builder.setPart(); //設置不同的零件,產生不同的產品 return builder.buildProduct(); } }
導演類起到封裝的作用,避免高層模塊深入到建造者內部的實現類
二、建造者模式的優點
-
封裝性
使用建造者模式可以使客戶端不必知道產品內部的細節。
-
建造者獨立,容易擴展
需要新添加一個產品類型時,添加一個新的建造者模式即可,無需修改原來內容
-
便於控制細節風險
由於具體的的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任何影響
三、建造者模式的使用場景
-
相同的方法,不同的執行順序,產生不同的事件結果時
-
多個部件或零件,都可以裝配到一個對象中,但是產生的運行結果又不相同時
-
在對象創建過程中會使用到系統中的一些其他對象,這些對象在產品對象的創建過程中不易得到時
注意:建造者模式關注的是零件類型和裝配順序,模板方法關注的是它的對象創建,不關注組建的順序,這是它與工廠方法模式最大不同的地方,