运用设计模式只是为了解决一类问题的,当解决掉当前一类问题,通常会在解决这个问题时候 带来其他问题 合理应用扬长避短
例如我们 来分装一个 造汽车的 建造者。造汽车 比之前的例子 在建造环节 复杂。 所以我们在 建造过程中 添加了一层 工厂模式 没有的一层(Direct) , 由他来掌控真个建造过程中的复杂问题!
//抽象汽车工场 public abstract class AbstractBuilder { public string _Body{ get; set; } public string _Light { get; set; } public string _Wheel { get; set; } //制造车灯 public abstract void Light(); //制造方向盘 public abstract void Wheel(); //制造车身 public abstract void Body(); public abstract Car ResoultCar(); } class AudiBuilder : AbstractBuilder { public override void Body() { Console.WriteLine("造车生"); this._Body = "Audi body"; } public override void Light() { Console.WriteLine("造车灯"); this._Light = "Audi List"; } public override void Wheel() { Console.WriteLine("造车方向盘"); this._Wheel = "Audi Wheel"; } public override Car ResoultCar() { return new Car(this._Body, this._Light, this._Wheel); } } ///奔驰工厂 class BenzBuilder : AbstractBuilder { public override void Body() { Console.WriteLine("造车生"); this._Body = "奔驰 Body"; } public override void Light() { Console.WriteLine("造车灯"); this._Light = "奔驰 Light"; } public override void Wheel() { Console.WriteLine("造车方向盘"); this._Wheel = "奔驰 wheel"; } public override Car ResoultCar() { return new Car(this._Body,this._Light,this._Wheel); } } class BYDBuilder : AbstractBuilder { public override void Body() { Console.WriteLine("造车生"); } public override void Light() { Console.WriteLine("造车灯"); } public override void Wheel() { Console.WriteLine("造车方向盘"); } public override Car ResoultCar() { return new Car(this._Body, this._Light, this._Wheel); } } public class Car { public Car(string wheel, string body, string light) { Console.WriteLine( "car:"+wheel+body+light); } } //汽车公司管理 public class DirecterSkill { private AbstractBuilder builder; public DirecterSkill(AbstractBuilder builder) { this.builder = builder; builder.Body(); builder.Wheel(); builder.Light(); } public void Resoult() { this.builder.ResoultCar() ; } } static void Main(string[] args) { AbstractBuilder builder = new BYDBuilder(); DirecterSkill directerSkill = new DirecterSkill(builder); directerSkill.Resoult (); Console.ReadKey(); }