C#设计模式之工厂方法模式
说到工厂方法不得不提简单工厂,那么简单工厂与工厂方法有什么不同呢?
下面我以气球来做一个简单的例子来说明:
简单工厂的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化 相关的类,对于客户端来说,去除了与具体产品的依赖。
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
static void Main(string[] args) { BFactory factory = new BlueballoonFactory(); Balloon qiqiu = factory.CreateBalloon(); qiqiu.Fly(); qiqiu.show(); Console.Read(); }对比两种代码我们可以发现:依据依赖倒转的原则,把工厂类抽象出一个接口,这个接口只有创建抽象气球的方法。然后,所有的要生产的具体类的工厂就去实现这个接口,这样一个简单工厂模式的工厂类变成了一个工厂抽象接口和多个具体生产对象的工厂,增加GreenBalloon的功能时,就不需要更改原有的工厂类。
下列情况可以考虑使用工厂方法模式:
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说工厂方法把简单工厂的内部逻辑选择判断转移到了客户端代码来进行,这样本来是改工厂类,而现在是修改客户端!这样就降低了客户程序与产品对象的耦合,工厂方法模式是简单工厂模式的进一步抽象和推广。