建造者模式定義:建造者模式分離了物件子元件的構造(由builder構造)和裝配(由director裝配)。從而可以構造出複雜的物件。
適用環境:某個物件構建過程比較複雜。實現物件的建立和裝配解耦,讓客戶端使用者只需要關心自己得到的產品而不是關心產品時怎樣具體產生的(這一點類似工廠模式。)
一、工廠模式與建造者模式區別及其聯絡
1.區別
工廠模式:產生的乙個產品是乙個整體。 比如乙個強壯的機械人。乙個紅的機械人
建造者模式:產生的乙個產品是一堆子元件組合的複雜的物件,比如乙個強壯的機械人由主體,胳膊,腿構成
2.聯絡
通常構造者模式會和工廠模式或者單例模式一起組合使用。在構造器內部提供簡單類的物件。
我是用簡單的產品機械人作為例子練習的,兩個大部分,機械人的構建和機械人的組裝。
二、uml類圖
三、原始碼
1.產品類robot,由body、leg、arm組成。
package builder;
/** * 建造者模式:分離了物件子元件的單獨構造(由builder來負責)和裝配(由director負責)。
* 從而可以構造出複雜的物件。這個模式適用於:某個物件的構建過程複雜的情況下使用;
* 實現建立和裝配解耦,不同的構建器,相同的裝配,也可以做出不同的物件;
* 相同的構建器,不同的裝配順序也可以做出不同的物件。也就是實現了構建演算法、裝配演算法的解耦,實現了更好的復用。
*/public class robot
public void setbody(body body)
public leg getleg()
public void setleg(leg leg)
public arm getarm()
public void setarm(arm arm)
}class arm
public string getname()
public void setname(string name)
}class leg
public void setname(string name)
public leg(string name)
}class body
public string getname()
public void setname(string name)
private string name;
}
2.構建者:
package builder;
public inte***ce robotbuilder
package builder;
public class strongrobotbuilder implements robotbuilder
public leg builderleg()
public arm builderarm()
}
構建者只提供子元件構建,這裡可以使用單例模式或者工廠模式結合起來使用
3.元件者
package builder;
public inte***ce robotdirector
package builder;
public class strongrobotdirector implements robotdirector
public robot directrobot()
}
組裝者呼叫構建者得到子元件和 組裝成複雜物件robot
4.客戶端
package builder;
public class client
}
四:總結
構建者模式用來解決構造複雜物件,比如物件包含vo,do,配置檔案的讀取。 實現了子元件和this物件的 解耦。 builder,director都具有單一職責,對**的擴充套件放開。當需要新增乙個同族類似產品時只需要新建builder類和對應的產品類。
設計模式GOF23 建造者模式
建造者模式 builder 是建立者模式的一種,是一種負責建立物件的模式。在實際開發中,有的時候我們需要建立的物件十分複雜,有時候需要很多步奏來處理。建造者模式的任務就是分離和物件子元件的單獨構造 由builder負責 和裝配 由director負責 從而構造出複雜的物件。使用的場景就是構造比較複雜...
GOF23設計模式之建造者模式
什麼是建造者模式,正如其名,也就是用來建造某個物件的一種設計模式。也不是什麼物件都用這個建造者模式,該模式主要用於構建比較複雜的物件,也就是建立起來比較繁瑣的物件。比如上篇抽象工廠中所說的高階手機物件,它由好多種基產品構成,包括處理器 螢幕 攝像頭等等。換句話說就是乙個類中包含許多其他類做為其屬性 ...
GOF23 設計模式
design patterns elements of reusable object oriented software 即後述 設計模式 一書 由 erich gamma richard helm ralph johnson 和 john vlissides 合著 addison wesley,...