建造者模式的本質:分離了物件子元件的單獨構造(由builder來負責)和裝配(由director負責裝配)。從而構造出複雜的物件:這個模式的適用於:某個物件的構建過程複雜的情況下使用。由於實現了構建和裝配的解耦。不同的構建器、相同的裝配,也可以做出不同的物件;相同的構建器,不同的裝配順序也可以做出不同的物件。也就是實現了構建演算法、裝配演算法的解耦,實現了更好的復用。
1.首先定義電腦的各個元件以及電腦實體
package builder;
/** * 電腦類
* @author acer
*/public class computer
public void setcpu(cpu cpu)
public memory getmemory()
public void setmemory(memory memory)
public screen getscreen()
public void setscreen(screen screen)
public void totring() }
package builder;
/** * @author acer
* cpu元件
*/public class cpu
public string getname()
public void setname(string name)
}package builder;
/** * 定義記憶體元件
* @author acer
*/public class memory
public string getname()
public void setname(string name)
}package builder;
/** * 定義螢幕元件
* @author acer
*/public class screen
public string getname()
public void setname(string name)
}
2.定義電腦的元件的建造者介面(builder)和電腦的組裝介面(director)
package builder;
/** * 電腦元件的建造者
* @author acer
*/public inte***ce computerbuilder
package builder;
/** * 電腦的組裝過程
* @author acer
*/public inte***ce computerdirector
如果我們想要建乙個acer牌的電腦,那麼需要乙個類來實現computerbuilder介面,乙個類實現computerdirector介面:
package builder;
/** * acer電腦元件的建立
* @author acer
*/public class acercomputerbuilder implements computerbuilder
@override
public memory buildmemory()
@override
public screen buildscreen()
}package builder;
/** * acer電腦的組裝類
* @author acer
* */
public class acercomputerdirector implements computerdirector
@override
public computer createcomputer() }
package builder;
public class client
}
上面這種建立的方式有什麼好處呢,如果所有的建立細節都一樣,那麼這個模式的建立過程是繁瑣的。但是如果不同的電腦在具體的建立細節都是不同的,但是整體的流程都是相同的,cpu,記憶體,螢幕,這些都是必須的,但是型號又不同。組裝也是必須的,但是組裝的細節又不同。所以使用建造者模式就保證了流程的確定性,而細節可以繼續擴充套件。
想要好好的講述一下建造者模式的精髓,但是又不夠形象,在網上發現有一段解釋非常精闢,借用一下
【建造者模式屬於建立型模式(先記下)。顧名思義,builder的意思是建造者或者建築工人。例如:樓房是千差萬別的,樓房的外形,層數,內部房間的數量,房間的裝飾都不一樣。但是對於建造者來說,抽象出來的建築流程是確定的。因為建築一座樓房,都可以歸納為幾個步驟:1打樁、2建地基、3搭框架、4內部建設。同理,建造者設計模式也是基於這樣的概念而生的,這個設計模式用來解決什麼樣的情況呢:即流程不變,但每個流程實現的具體細節是會變化的。這樣的情況,可以考慮使用建造者。就像蓋房子,4個流程都必須有,但每個流程各自的實現細節,各個房子各有不同。建造者模式的好處就是保證了流程不會變化,即流程不會增加也不會遺漏,也不會產生流程次序的錯誤。這是非常重要的,看新聞,一些樓歪歪的事件,很多都是建設樓盤的時候,流程出現了問題導致的。(看來這些人並不知道建造者模式啊)。而建造者模式,保證了流程的確定性,而流程內部的實現細節,是可繼承擴充套件的。從根源上解決了流程不規範的問題。
福清有一道小吃叫海蠣餅,家家戶戶都會做,但各家各戶做的味道都不同。雖然味道不同,但製作海蠣餅的流程步驟,大致都是一樣的。乙個成功的海蠣餅,外酥內嫩,滋味豐富。雖然口感各有不同,但只要流程步驟不差,都會做出好吃的海蠣餅。而一些剛嫁人的新媳婦們製作海蠣餅卻不如婆婆好,因為新媳婦剛學做,不熟悉流程,難免流程常有疏漏。而如果讓婆婆站在媳婦旁把控制作流程,海蠣餅就不會差。所以說,如果流程控制好了,生產出來的海蠣餅就不會差。
寫**也是如此,如果你遇到乙個需要把控流程,但流程中的實現細節各有許多的方式,你可以採用建造者模式。用乙個director類把控流程,而用許多不同的builder去建造流程中的細節並產生產品。這樣,生產出來的產品是絕對不會出問題的。因為流程把控好了。你可以有多個builder去負責建造生產產品,而讓director去把控流程。如果有新的產品,但是流程一致,你可以再擴張出乙個builder來。這樣,你看,建造者模式是不是很符合ocp原則呢。】
文字** 【
建造者模式
1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...
建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
建造者模式
建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...