工厂方法模式
之前学习了简单工厂模式,简单工厂模式解决了创建对象的事情,当在主程序中需要根据不同的情况创建不同的对象时,我们采用此方法,把switch判断放在一个类中,最后直接返回给主程序一个特定的类。 而现在要学习的工厂方法模式跟简单工厂模式差不多,这两个模式可以对比着学习,简单工厂模式是在工厂里面做的逻辑判断直接返回一个特定的对象,而工厂方法模式则是把简单工厂中创建对象的类抽象成一个接口,让实现接口的子类来创建特定的对象。 与简单工厂模式相比:工厂方法模式避免了简单工厂模式存在的开放——封闭原则(对扩展开放,对修改关闭),因为每增加一种情况,需要添加一个类,并且改动工厂类中的switch分支条件;而工厂模式写起来相对繁琐一些,因为每一个类都需要对应一个工厂接口的子类来创建此类,也就是说当要增加一种情况时,需要添加两个类,而在主程序中来修改这个switch条件。 具体的应用过程中我们根据具体情况来具体分析应该用什么模式。
下面通过一个例子来看一下工厂方法模式: public abstract class Person //抽象类Person { public abstract void SayHello(); }
public class Chinese:Person //Person类的子类1 { public override void SayHello() { Console.WriteLine("我来自中国"); } }
public class American:Person //Person类的子类2 { public override void SayHello() { Console.WriteLine("我来自美国"); } }
interface IFactory //创建类的接口 { Person CreatePerson(); }
public class FactoryChin:IFactory //接口1用来生成Chinese类 { public Person CreatePerson() { return new Chinese(); } }
public class FactoryAme:IFactory //接口2用来生成American类 { public Person CreatePerson() { return new American(); } }
主程序中的代码: static void Main(string[] args) { //此处省略了switch的条件判断 Person per =(new FactoryAme()).CreatePerson(); per.SayHello(); Console.ReadKey(); }
总结:简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。 工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
- 1楼Wentasy昨天 18:47
- 学习了。