设计模式:工厂方法模式(Factory Method) 明

作者:TerryLee  创建于:2005-12-09 出处:http://terrylee.cnblogs.com/archive/2006/01/04/310716.html  摘录于:2013-02-28

结构图


   

意图


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

 适用性


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

实现代码


现在我们考虑一个日志记录的例子假定我们要设计日志记录的类,支持记录的方法有FileLog和EventLog两种方式。在这里我们先不谈设计模式,那么这个日志记录的类就很好实现了。

 1 using System;
 2 namespace Log
 3 {
 4     public abstract class Log
 5     {
 6         public abstract void Write();
 7     }
 8     // EventLog类
 9     public class EventLog : Log
10     {
11         public override void Write()
12         {
13             Console.WriteLine("EventLog Write Success!");
14         }
15     }
16     // FileLog类
17     public class FileLog : Log
18     {
19         public override void Write()
20         {
21             Console.WriteLine("FileLog Write Success!");
22         }
23     }
24 }
25 namespace LogFactory
26 {
27     using Log;
28     // LogFactory类
29     public abstract class LogFactory
30     {
31         public abstract Log Create();
32     }
33     // EventFactory类
34     public class EventFactory : LogFactory
35     {
36         public override Log Create()
37         {
38             return new EventLog();
39         }
40     }
41     // FileFactory类
42     public class FileFactory : LogFactory
43     {
44         public override Log Create()
45         {
46             return new FileLog();
47         }
48     }
49 }
50 namespace Customer
51 {
52     using Log;
53     using LogFactory;
54     public class Program
55     {
56         public static void Main(string[] args)
57         {
58             LogFactory factory = new EventFactory();
59             Log log = factory.Create();
60             log.Write();
61             Console.Read();
62         }
63     }
64 }

实现要点


1.  Factory Method模式的两种情况:一是Creator类是一个抽象类且它不提供它所声明的工厂方法的实现;二是Creator是一个具体的类且它提供一个工厂方法的缺省实现。

2.  工厂方法是可以带参数的。
3.  工厂的作用并不仅仅只是创建一个对象,它还可以做对象的初始化,参数的设置等。

效果


1.  用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活。

2.  Factory Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。

原文地址:https://www.cnblogs.com/Ming8006/p/2936790.html