建造者模式:導向器封裝生成產品的具體步驟
《設計模式》中定義:
Builder模式的緣起:
假設創建游戲中的一個房屋House設施,該房屋的構建由幾部分組成,且各個部分富于變化。如果使用最直觀的設計方法,每一個房屋部分的變化,都將導致房屋構建的重新修正.....
動機(Motivation):
在軟件系統中,有時候面臨一個"復雜對象"的創建工作,其通常由各個部分的子對象用一定算法構成;由于需求的變化,這個復雜對象的各個部分經常面臨著劇烈的變化,但是將它們組合到一起的算法卻相對穩定。
如何應對種變化呢?如何提供一種"封裝機制"來隔離出"復雜對象的各個部分"的變化,從而保持系統中的"穩定構建算法"不隨需求的改變而改變?
意圖(Intent):
將一個復雜對象的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。
UML 表示如下:
這里的Builder是一個抽象類,不是接口,為了共用一些屬性和代碼,把稍微變化的部分讓子類來實現(顯然Builder 和 ConcreteOneProduct、ConcreteTwoProduct組成了個模板模式)。
先看建造者,一個抽象類,提供一些公用實現(Builder.java):
一個實現,主要是繪制三角形:
第二個實現:
產品定義:
導向器,封裝著產品生成的具體過程:
客戶端代碼調用方式:
輸入如下:
每一次運行可能生成變形長度都會變好,這個變好有導向器進行控制著。
源文件下載
Builder模式的緣起:
假設創建游戲中的一個房屋House設施,該房屋的構建由幾部分組成,且各個部分富于變化。如果使用最直觀的設計方法,每一個房屋部分的變化,都將導致房屋構建的重新修正.....
動機(Motivation):
在軟件系統中,有時候面臨一個"復雜對象"的創建工作,其通常由各個部分的子對象用一定算法構成;由于需求的變化,這個復雜對象的各個部分經常面臨著劇烈的變化,但是將它們組合到一起的算法卻相對穩定。
如何應對種變化呢?如何提供一種"封裝機制"來隔離出"復雜對象的各個部分"的變化,從而保持系統中的"穩定構建算法"不隨需求的改變而改變?
意圖(Intent):
將一個復雜對象的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。
UML 表示如下:
![]() |
Builder模式 |
這里的Builder是一個抽象類,不是接口,為了共用一些屬性和代碼,把稍微變化的部分讓子類來實現(顯然Builder 和 ConcreteOneProduct、ConcreteTwoProduct組成了個模板模式)。
先看建造者,一個抽象類,提供一些公用實現(Builder.java):
/** |
一個實現,主要是繪制三角形:
public class ConcreteOneBuilder extends Builder { |
第二個實現:
public class ConcreteTwoBuilder extends Builder { |
產品定義:
/** |
導向器,封裝著產品生成的具體過程:
/** |
客戶端代碼調用方式:
public class Client { |
輸入如下:
產品型號(0.23):
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
現在輸出第二個產品:
產品型號(0.17):
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
* * *
* *
*
每一次運行可能生成變形長度都會變好,這個變好有導向器進行控制著。
源文件下載
posted on 2010-10-26 17:36 nieyong 閱讀(355) 評論(0) 編輯 收藏 所屬分類: Java