可以用抽象工厂模式来造车。
车的品牌有很多,而且车的属性也不少,比如车的类型、排量、门的数量,等等。可以提炼出有关车的一个抽象类:
public abstract 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> Accessores = new List<string>();public abstract void ShowCarInfo();}
既然是抽象工厂,提炼出一个造车的接口:
public interface ICarFactory{Car ProduceCar();}
写一个Car的派生类:
public class MyCar : Car{public MyCar(){Model = "型号001";Engine = "发动机V";Transmission = "排量1";Body = "SUV";Doors = 4;Accessores.Add("内饰");Accessores.Add("外饰");}public override void ShowCarInfo(){Console.WriteLine(Model);Console.WriteLine(Engine);Console.WriteLine(Body);Console.WriteLine("门数量:" + Doors);Console.WriteLine("包括:");foreach (var accessory in Accessores){Console.WriteLine(" {0}", accessory);}}}
MyCar需要一个对应的具体工厂来造车。写一个具体工厂类,实现ICarFactory接口。
public class MyFactory : ICarFactory{public Car ProduceCar(){return new MyCar();}}
在客户端,如果要造车,就找具体工厂就可以了。
static void Main(string[] args){ICarFactory carFactory = new MyFactory();carFactory.ProduceCar().ShowCarInfo();Console.ReadKey();}
总结:
1、需要工厂生产对象的抽象类以及派生类
2、需要一个抽象工厂接口
3、通过抽象工厂造车,必须把所有的细节都设计在代表车的抽象类中,扩展性不好