工厂方法模式 (2).doc

工厂方法模式 (2).doc

ID:52440533

大小:135.50 KB

页数:14页

时间:2020-03-27

工厂方法模式 (2).doc_第1页
工厂方法模式 (2).doc_第2页
工厂方法模式 (2).doc_第3页
工厂方法模式 (2).doc_第4页
工厂方法模式 (2).doc_第5页
资源描述:

《工厂方法模式 (2).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、工厂方法模式(FactoryMethod)提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的FactoryMethod模式了。概述  在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的FactoryMethod模式了。  意图  定义一个用户创建对象的接口

2、,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。  结构图  生活中的例子  工厂方法定义一个用于创建对象的接口,但是让子类决定实例化哪个类。压注成型演示了这种模式。塑料玩具制造商加工塑料粉,将塑料注入到希望形状的模具中。玩具的类别(车,人物等等)是由模具决定的。  工厂方法解说  在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新

3、产品。在FactoryMethod模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应。现在我们考虑一个日志记录的例子(这里我们只是为了说明FactoryMethod模式,实际项目中的日志记录不会这么去做,也要比这复杂一些)。假定我们要设计日志记录的类,支持记录的方法有FileLog和EventLog两种方式。在这里我们先不谈设计模式,那么这个日志记录的类就很好实现了:1/**////

2///日志记录类3///4publicclassLog5  {67    publicvoidWriteEven

4、t()8    {9      Console.WriteLine("EventLogSuccess!");10    }11  12    publicvoidWriteFile()13    {14      Console.WriteLine("FileLogSuccess!");15    }1617    publicvoidWrite(stringLogType)18    {19      switch(LogType.ToLower())20      {21        case"event":22          Wri

5、teEvent();23          break;2425        case"file":26          WriteFile();27          break;2829        default:30          break;31      }32    }33  }34  这样的程序结构显然不能符合我们的要求,如果我们增加一种新的日志记录的方式DatabaseLog,那就要修改Log类,随着记录方式的变化,switch语句在不断的变化,这样就引起了整个应用程序的不稳定,进一步分析上面的代码,发现对于Even

6、tLog和FileLog是两种完全不同的记录方式,它们之间不应该存在必然的联系,而应该把它们分别作为单独的对象来对待。1/**////

2///EventLog类3///4publicclassEventLog5{6  publicvoidWrite()7  {8    Console.WriteLine("EventLogWriteSuccess!");9  }10}1112/**////13///FileLog类14///15publicclassFileLog16{

7、17  publicvoidWrite()18  {19    Console.WriteLine("FileLogWriteSuccess!");20  }21}22  进一步抽象,为它们抽象出一个共同的父类,结构图如下:  实现代码:1/**////

2///Log类3///4publicabstractclassLog5{6  publicabstractvoidWrite();7}8  此时EventLog和FileLog类的代码应该如下:1/**////2///EventLog类3

8、///

4publicclassEventLog:Log5{6  publicoverridevoidWrite()7  {8   

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。