C#通過(guò)Builder模式造車
Builder模式也可以造車。
對(duì)于Builder模式來(lái)說(shuō),首相要把要造的車確定下來(lái):
public class Car { public string Model { get; set; } public string Engine { get; set; } public string Transmission { get; set; } public string Body { get; set; } public int Doors { get; set; } public List<string> Accessories { get; set; } public Car() { Accessories = new List<string>(); } public void ShowCarInfo() { Console.WriteLine(Model); Console.WriteLine(Engine); Console.WriteLine(Body); Console.WriteLine("門的數(shù)量:" + Doors); Console.WriteLine(Transmission); Console.WriteLine("配置為:"); foreach (var accessory in Accessories) { Console.WriteLine("\t{0}", accessory); } } }
這個(gè)Car可以交給Builder1也可以交給Builder2,等等,但首先需要提煉出Builder們的一個(gè)抽象類。這個(gè)抽象Builder可以設(shè)置和獲取Car,并提供生產(chǎn)Car各個(gè)部件的抽象方法。
public abstract class CarBuilder { protected Car _car; public Car GetCar() { return _car; } public void SetCar() { _car = new Car(); } public abstract void SetModel(); public abstract void SetEngine(); public abstract void SetTransmission(); public abstract void SetBody(); public abstract void SetDoors(); public abstract void SetAccessories(); }
然后,就需要一個(gè)具體的Builder來(lái)派生抽象Builder。
public class BuilderOne : CarBuilder { public override void SetEngine() { _car.Engine = "發(fā)動(dòng)機(jī)1"; } public override void SetModel() { _car.Model = "型號(hào)1"; } public override void SetTransmission() { _car.Transmission = "變速1"; } public override void SetBody() { _car.Body = "SUV"; } public override void SetAccessories() { _car.Accessories.Add("內(nèi)飾"); _car.Accessories.Add("外飾"); } public override void SetDoors() { _car.Doors = 6; } }
這個(gè)抽象Builder的派生類可能有很多,所以需要一個(gè)管理這些派生Builder的類,用來(lái)決定到底選用哪個(gè)Builder來(lái)生產(chǎn)。
public class BuilderManager { private readonly CarBuilder _carBuilder; public BuilderManager(CarBuilder carBuilder) { _carBuilder = carBuilder; } public void BuildCar() { _carBuilder.SetCar(); _carBuilder.SetModel(); _carBuilder.SetEngine(); _carBuilder.SetBody(); _carBuilder.SetDoors(); _carBuilder.SetTransmission(); _carBuilder.SetAccessories(); } public Car GetCar() { return _carBuilder.GetCar(); } }
在客戶端,如果需要造車,就找Builder的管理類,通過(guò)它的構(gòu)造函數(shù)傳入具體的Builder。
class Program { static void Main(string[] args) { var builderManager = new BuilderManager(new BuilderOne()); builderManager.BuildCar(); var car = builderManager.GetCar(); car.ShowCarInfo(); Console.ReadKey(); } }
抽象工廠和Builder模式都可以造車,但兩者有也許的不同:
- 抽象工廠模式相當(dāng)于為車找了一個(gè)專屬工廠,要求工廠只能造這種類型的車
- Builder模式相當(dāng)于為車找不同的工廠,不同的工廠生產(chǎn)出來(lái)的車型都不一樣
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- C#設(shè)計(jì)模式之Builder生成器模式解決帶老婆配置電腦問(wèn)題實(shí)例
- C# StringBuilder和string
- C#中的char、string和StringBuilder的使用詳解
- 淺談C# StringBuilder內(nèi)存碎片對(duì)性能的影響
- C#使用String和StringBuilder運(yùn)行速度測(cè)試及各自常用方法簡(jiǎn)介
- C#中String和StringBuilder的簡(jiǎn)介與區(qū)別
- C#中String StringBuilder StringBuffer類的用法
- 淺析C#中StringBuilder類的高效及與String的對(duì)比
- 在C#及.NET框架中使用StringBuilder類操作字符串的技巧
- js實(shí)現(xiàn)C#的StringBuilder效果完整實(shí)例
相關(guān)文章
C#百萬(wàn)數(shù)據(jù)查詢出現(xiàn)超時(shí)問(wèn)題的解決方法
這篇文章主要介紹了C#百萬(wàn)數(shù)據(jù)查詢出現(xiàn)超時(shí)問(wèn)題的解決方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-09-09解析C#中的私有構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù)
這篇文章主要介紹了C#中的私有構(gòu)造函數(shù)和靜態(tài)構(gòu)造函數(shù),是C#入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01C# 串口接收數(shù)據(jù)中serialPort.close()死鎖的實(shí)例
下面小編就為大家分享一篇C# 串口接收數(shù)據(jù)中serialPort.close()死鎖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11c# socket網(wǎng)絡(luò)編程接收發(fā)送數(shù)據(jù)示例代碼
這篇文章主要介紹了c# socket網(wǎng)絡(luò)編程,server端接收,client端發(fā)送數(shù)據(jù),大家參考使用吧2013-12-12C#使用Fody實(shí)現(xiàn)監(jiān)控方法執(zhí)行時(shí)間
這篇文章主要為大家詳細(xì)介紹了C#如何使用Fody實(shí)現(xiàn)監(jiān)控方法執(zhí)行時(shí)間,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11C#使用Directoryinfo類獲得目錄信息和屬性的方法
這篇文章主要介紹了C#使用Directoryinfo類獲得目錄信息和屬性的方法,涉及C#操作目錄的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04unity3D實(shí)現(xiàn)物體任意角度自旋轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了unity3D實(shí)現(xiàn)物體任意角度自旋轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07