工厂方法模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值