1. 程式人生 > >設計模式-建造者模式(05)

設計模式-建造者模式(05)

部分 目標 bstr 好的 細節 get 邏輯 str ext

定義

  建造者模式(Builder Pattern)也叫做生成器模式。英文原話是:Separate the construction of a complex object from its representation so that the same construction process can create different representations.意思是:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

  在建造者模式中,可以分為四個角色:

  1.抽象建造者(Builder)角色:該角色用於規範產品的各個組成部分,並進行抽象,一般獨立於應用程序的邏輯。

  2.具體建造者(Concrete Builder)角色:該角色實現抽象建造者中定義的所有方法,並且返回一個組建好的產品實例。
  3.產品(Product)角色:該角色是建造中的復雜對象,一個系統中會有多個產品類,這些產品類並不一定有共同的接口,可以是完全不相關聯的。
  4.導演者(Director)角色:該角色負責安排已有模塊的順序,然後告訴Builder開始建造。

/**
 * 抽象建造者角色(Builder)
 * 規範產品的組成部分
 */
public abstract class Builder {
    //設置產品的部分部分,以獲得不同的產品
    public
abstract void setPart1(); public abstract void setPart2(); public abstract void setPart3(); //...更多部件限制 //建造產品 public abstract Product builderProduct(); } /** * 具體建造者(Concrete Builder) * 實現建造者中定義的方法,並且返回一個組建好的產品實例. */ public class ConcreteBuilder extends Builder {
private Product product = new Product(); //設置產品零件 @Override public void setPart1() { //為product產品安裝部件1 } @Override public void setPart2() { //為product產品安裝部件2 } @Override public void setPart3() { //為product產品安裝部件3 } //...其他部件 //建造一個產品 @Override public Product builderProduct() { return product; } } /** * 產品角色(Product) * 一個建造者模式可以有多個產品,並且可以是完全不相關聯的 */ public class Product { //產品類的業務處理方法 } /** * 導演者角色(Director) * 負責調用具體建造者的方法,告訴Builder開始建造 */ public class Director { private Builder builder = new ConcreteBuilder(); //構造產品,負責調用各個零件構造方法 public Product build(){ builder.setPart1(); builder.setPart2(); builder.setPart3(); //...其他部件 return builder.builderProduct(); } }

源碼

建造者模式的優點

  1.封裝性,使用建造者模式可以使客戶端不必知道產品內部組成的細節。
  2.建造者獨立,容易拓展。
  3.便於控制細節風險。由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他模塊產生任何影響。

建造者模式的使用場景

  1.當采用相同的方法,不同的執行順序,產生不同的結果時,可以采用建造者模式實現。
  2.多個部件或零件,都可以裝配到一個對象中,但是產生的運行結果又不相同時,則可以使用該模式。
  3.當產品類非常復雜,或者產品類中的方法調用順序不同產生了不同的效能時,使用建造者模式。
  4.當在對象創建過程中會使用到系統的一些其他對象,而這些對象在產品的創建過程中不易得到時,也可以采用建造者模式封裝該對象的創建過程。這種場景只能是一個補償方法,因為一個對象不容易獲得,而在設計階段沒有發現,卻要通過建造者封裝創建過程,本身已經違反設計的最初目標。

建造者模式關註的是零件類型和轉配工藝順序,這是它與工廠方法模式最大的不同之處,雖然同為創建類模式,但是重點不同。

設計模式-建造者模式(05)