.Net设计模式_工厂模式(2)

2、工厂方法模式

引言:

上一篇中我们描述了简单工厂的缺点,而解决方法就是把工厂接口化,把工厂的行为标准化,这就是工厂方法模式。

 

理解:

工厂能制造A和B鞋,如果消费者现在要求制造C鞋、D鞋...咋办?傻办法是,新建一个C鞋类、D鞋类....(这个没有影响原来的代码),

然后修改工厂类,每次消费者有要求,工厂就停产修改。(这个商人肯定要亏本)商人不干了,要亏本亏死了。

问题出在工厂类。

所以,我们需要修改工厂类,把工厂提炼成一个接口,定义通用的行为,新的商品实现新商品工厂,来完成生产,原来的生产不会受影响。

(这里我们可理解成,代码的可扩展性好)

代码示例:

我们需要生产笔去写我们的信:

.Net设计模式_工厂模式(2)
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");
    }
}
.Net设计模式_工厂模式(2)

定义不同的笔厂:

.Net设计模式_工厂模式(2)
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();
    }
}
.Net设计模式_工厂模式(2)

消费者要笔:

.Net设计模式_工厂模式(2)
static void Main(string[] args)
{
    IFactory penFactory = new BPenFactory();
    IPen pen = penFactory.CreatePen();
    pen.Write();
    Console.ReadKey();
}
.Net设计模式_工厂模式(2)

这样如果有新的笔,C笔需要生产的话,就只要新建一个类CPen.cs(继承IPen),然后再新建一个CPen的工厂类CPenFactory.cs(继承IFactory),用户就可以买到CPen了,我们就不用工厂停产修改了。(这里体现的是,代码的可扩展性和可维护性)。

图解:(出之http://www.cnblogs.com/zhenyulu/articles/36590.html

.Net设计模式_工厂模式(2)

 

总结:

优点,工厂方法模式使代码的可扩展性变的非常的话。

缺点,好像没有,可以说为缺点的话,就是代码变多了。

下一篇是抽象工厂的梳理。

.Net设计模式_工厂模式(2)

上一篇:项目Alpha冲刺 1


下一篇:js判断浏览器内核 及ie的版本问题