您的位置:首页 > 其它

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

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

[b]结构图[/b]



意图

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

适用性

当一个类不知道它所必须创建的对象的类的时候。

当一个类希望由它的子类来指定它所创建的对象的时候。

当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

实现代码

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

using System;
namespace Log
{
public abstract class Log
{
public abstract void Write();
}
// EventLog类
public class EventLog : Log
{
public override void Write()
{
Console.WriteLine("EventLog Write Success!");
}
}
// FileLog类
public class FileLog : Log
{
public override void Write()
{
Console.WriteLine("FileLog Write Success!");
}
}
}
namespace LogFactory
{
using Log;
// LogFactory类
public abstract class LogFactory
{
public abstract Log Create();
}
// EventFactory类
public class EventFactory : LogFactory
{
public override Log Create()
{
return new EventLog();
}
}
// FileFactory类
public class FileFactory : LogFactory
{
public override Log Create()
{
return new FileLog();
}
}
}
namespace Customer
{
using Log;
using LogFactory;
public class Program
{
public static void Main(string[] args)
{
LogFactory factory = new EventFactory();
Log log = factory.Create();
log.Write();
Console.Read();
}
}
}


实现要点

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

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

效果

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

2. Factory
Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: