說(shuo)說(shuo)設計模式(shi)~建造者(zhe)模式(shi)(Builder)
建(jian)(jian)造者模(mo)式(shi)是我(wo)的(de)(de)(de)(de)"設計模(mo)式(shi)"里創建(jian)(jian)型模(mo)式(shi)里的(de)(de)(de)(de)最后一篇,這種模(mo)式(shi)在實(shi)現(xian)(xian)中(zhong),很多架構都用到(dao)了(le),如MVC,MVP,MVVM,它們都是有(you)建(jian)(jian)造者模(mo)式(shi)的(de)(de)(de)(de)精(jing)髓的(de)(de)(de)(de),即,創建(jian)(jian)與(yu)表現(xian)(xian)分享,我(wo)們的(de)(de)(de)(de)MVC何嘗(chang)不是,我(wo)們的(de)(de)(de)(de)MVVM又(you)何嘗(chang)不是呢,我(wo)們做軟件的(de)(de)(de)(de),換膚(fu)是常有(you)的(de)(de)(de)(de)事,其(qi)實(shi)換膚(fu)的(de)(de)(de)(de)實(shi)現(xian)(xian)不就是建(jian)(jian)造者模(mo)式(shi)最好的(de)(de)(de)(de)體現(xian)(xian)嗎,呵呵.
定義
將一個復雜對象的(de)構造與它的(de)表(biao)示(shi)分離,使同樣(yang)的(de)構建過(guo)程可以(yi)創建不(bu)同的(de)表(biao)示(shi),這樣(yang)的(de)設計模(mo)式被稱(cheng)為(wei)建造者模(mo)式。
何時能用到它?
建造者模式的結構圖
建造者模式實現說明
5 ManBuilder:這(zhe)是一個具體的執(zhi)行(xing)者(zhe),它可能有多個,每個執(zhi)行(xing)者(zhe)負(fu)責自(zi)己的部(bu)分
建造者模式的C#實現
public class Person { public string Name { get; set; } public short Gander { get; set; } public String Head { get; set; } public String Body { get; set; } public String Foot { get; set; } public void SetHead(string content) { Console.WriteLine(content); Head = content; } public void SetBody(string content) { Console.WriteLine(content); Body = content; } public void SetFoot(string content) { Console.WriteLine(content); Foot = content; } public override string ToString() { return string.Format("Head={0},Body={1},Foot={2}", Head, Body, Foot); } } public class Man : Person { public Man() { this.Gander = 1; } } public interface PersonBuilder { void buildHead(); void buildBody(); void buildFoot(); Person buildPerson(); } public class PersonDirector { public Person constructPerson(PersonBuilder pb) { pb.buildHead(); pb.buildBody(); pb.buildFoot(); return pb.buildPerson(); } } public class ManBuilder : PersonBuilder { Person person; public ManBuilder() { person = new Man(); } public void buildBody() { person.SetBody("建造男人(ren)的身體"); } public void buildFoot() { person.SetFoot("建造男人的腳"); } public void buildHead() { person.SetHead("建造男(nan)人(ren)的頭"); } public Person buildPerson() { return person; } } }
下面是調用程序
PersonDirector pd = new PersonDirector(); Person person = pd.constructPerson(new ManBuilder()); Console.WriteLine(person.ToString());
程序截圖