工厂方法模式

隐身守侯 提交于 2020-01-21 08:16:15

动机(Motivation):
    在软件系统中,由于需求的变化,"这个对象的具体实现"经常面临着剧烈的变化,但它却有比较稳定的接口
    如何应对这种变化呢?提供一种封装机制来隔离出"这个易变对象"的变化,从而保持系统中"其它依赖的对象"不随需求的变化而变化。

意图(Intent):
    定义一个用户创建对象的接口,让子类决定实例哪一个类。Factory Method使一个类的实例化延迟到子类。

适用性:
    1.当一个类不知道它所必须创建的对象类的时候。
    2.当一个类希望由它子类来指定它所创建对象的时候。
    3.当类将创建对象的职责委托给多个帮助子类中的某个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

 

具体实现在跳转页的下方,写了从简单工厂到工厂模式的演变,每个方法都需要学习,下方只是给出了工厂模式。(可以使工厂类进行封装)

 #region 创建接口
    interface Sender
    {
        void send();
    }

    //工厂接口
    interface IProduce
    {
        Sender produce();
    }
    #endregion
  #region 实现类
    class MailSender : Sender
    {
        public void send()
        {
            Console.WriteLine("this is Mail");
        }
    }
    class SmsSender : Sender
    {
        public void send()
        {
            Console.WriteLine("this is Sms");     
        }
    }
    #endregion
    #region 工厂类
    class MailFactory : IProduce
    {
        public Sender produce()
        {
            return new MailSender();
        }
    }
    class SmsFaCTORY : IProduce
    {
        public Sender produce()
        {
            return new SmsSender();
        }
    }
    #endregion

 

与上方无关,静态工厂实现起来也很简单,如下

  class Factory
    {
        public static Sender MailSender()
        {
            return new MailSender();
        }
        public static Sender SmsSender()
        {
            return new SmsSender();
        }
    }
     static void Main(string[] args)
        {
            //工厂模式实现
            Sender mail = new MailSender();
            mail.send();
            //静态工厂模式实现
            Factory.SmsSender().send();
            Console.ReadKey();
        }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!