本文共 2645 字,大约阅读时间需要 8 分钟。
在上一节中,我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而工厂方法模式(Factory Method),又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
应用场景:
工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成。本节来分析其基本结构和实现方法。
工厂方法模式的主要角色如下。
因为要拍摄《速度与激情8》,导演组车的种类增多了,阵容也更加豪华了,加上导演古怪的性格,可能每一场戏就需要试驾几十种车。如果车库没有的车(具体产品类),则需要由场务(具体工厂类)直接去4S店取,这样每增加一种车(具体产品类),就要对应的有一个场务(具体工厂类),他们互相之间有着各自的职责,互不影响,这样可扩展性就变强了。
代码
////// 抽象产品类: 汽车 /// public interface ICar { void GetCar(); } ////// 抽象工厂 /// public interface IFactory { ICar CreateCar(); } ////// 具体产品类: 跑车 /// public class SportCar : ICar { public void GetCar() { Console.WriteLine("场务把——跑车,交给主角"); } } ////// 具体产品类: 越野车 /// public class JeepCar : ICar { public void GetCar() { Console.WriteLine("场务把——越野车,交给主角"); } } ////// 具体产品类: 货车 /// public class HatchbackCar : ICar { public void GetCar() { Console.WriteLine("场务把——货车,交给主角"); } } ///// 具体工厂类: 用于创建跑车类 /// public class SportFactory : IFactory { public ICar CreateCar() { return new SportCar(); } } ////// 具体工厂类: 用于创建越野车类 /// public class JeepFactory : IFactory { public ICar CreateCar() { return new JeepCar(); } } ////// 具体工厂类: 用于创建货车类 /// public class HatchbackFactory : IFactory { public ICar CreateCar() { return new HatchbackCar(); } } //客户端 public class Program { static void Main(string[] args) { ICar car; try { IFactory factory = new SportFactory(); Console.WriteLine("主角下一场戏开——跑车。"); car = factory.CreateCar(); car.GetCar(); Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
优点:
缺点:
参考:
转载地址:http://xjiii.baihongyu.com/