动机(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(); }
来源:https://www.cnblogs.com/ningxinjie/p/12220568.html