2、工厂方法模式
引言:
上一篇中我们描述了简单工厂的缺点,而解决方法就是把工厂接口化,把工厂的行为标准化,这就是工厂方法模式。
理解:
工厂能制造A和B鞋,如果消费者现在要求制造C鞋、D鞋...咋办?傻办法是,新建一个C鞋类、D鞋类....(这个没有影响原来的代码),
然后修改工厂类,每次消费者有要求,工厂就停产修改。(这个商人肯定要亏本)商人不干了,要亏本亏死了。
问题出在工厂类。
所以,我们需要修改工厂类,把工厂提炼成一个接口,定义通用的行为,新的商品实现新商品工厂,来完成生产,原来的生产不会受影响。
(这里我们可理解成,代码的可扩展性好)
代码示例:
我们需要生产笔去写我们的信:
public interface IPen { void Write(); } public class APen : IPen { public void Write() { Console.WriteLine("A Pen"); } } public class BPen : IPen { public void Write() { Console.WriteLine("B Pen"); } }
定义不同的笔厂:
public interface IFactory { IPen CreatePen(); } public class APenFactory : IFactory { public IPen CreatePen() { return new APen(); } } public class BPenFactory : IFactory { public IPen CreatePen() { return new BPen(); } }
消费者要笔:
static void Main(string[] args) { IFactory penFactory = new BPenFactory(); IPen pen = penFactory.CreatePen(); pen.Write(); Console.ReadKey(); }
这样如果有新的笔,C笔需要生产的话,就只要新建一个类CPen.cs(继承IPen),然后再新建一个CPen的工厂类CPenFactory.cs(继承IFactory),用户就可以买到CPen了,我们就不用工厂停产修改了。(这里体现的是,代码的可扩展性和可维护性)。
图解:(出之http://www.cnblogs.com/zhenyulu/articles/36590.html)
总结:
优点,工厂方法模式使代码的可扩展性变的非常的话。
缺点,好像没有,可以说为缺点的话,就是代码变多了。
下一篇是抽象工厂的梳理。