首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

工厂方法形式

2013-11-09 
工厂方法模式之前学习了简单工厂模式,简单工厂模式解决了创建对象的事情,当在主程序中需要根据不同的情况

工厂方法模式
       之前学习了简单工厂模式,简单工厂模式解决了创建对象的事情,当在主程序中需要根据不同的情况创建不同的对象时,我们采用此方法,把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
学习了。

热点排行