原文:乐在其中设计模式(C#) – 工厂方法模式(Factory Method Pattern)
乐在其中设计模式(C#) – 工厂方法模式(Factory Method Pattern)
作者:webabcd
介绍
定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
示例
有SqlMessage和XmlMessage,用Factory Method来实例化它们。
MessageModel
using System.Collections.Generic;
namespace Pattern.FactoryMethod
/// <param name=”msg”>Message内容</param>
/// <param name=”pt”>Message发布时间</param>
public MessageModel(string msg, DateTime pt)
private DateTime _publishTime;
AbstractMessage
using System.Collections.Generic;
namespace Pattern.FactoryMethod
public abstract class AbstractMessage
public abstract List<MessageModel> Get();
/// <param name=”mm”>Message实体对象</param>
public abstract bool Insert(MessageModel mm);
SqlMessage
using System.Collections.Generic;
namespace Pattern.FactoryMethod
/// Sql方式操作Message(ConcreteProduct)
public class SqlMessage : AbstractMessage
public override List<MessageModel> Get()
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel(“SQL方式获取Message”, DateTime.Now));
/// <param name=”mm”>Message实体对象</param>
public override bool Insert(MessageModel mm)
XmlMessage
using System.Collections.Generic;
namespace Pattern.FactoryMethod
/// Xml方式操作Message(ConcreteProduct)
public class XmlMessage : AbstractMessage
public override List<MessageModel> Get()
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel(“XML方式获取Message”, DateTime.Now));
/// <param name=”mm”>Message实体对象</param>
public override bool Insert(MessageModel mm)
AbstractMessageFactory
using System.Collections.Generic;
namespace Pattern.FactoryMethod
public abstract class AbstractMessageFactory
/// <returns>AbstractMessage</returns>
public abstract AbstractMessage CreateMessage();
SqlMessageFactory
using System.Collections.Generic;
namespace Pattern.FactoryMethod
/// SqlMessage工厂(ConcreteCreator)
public class SqlMessageFactory : AbstractMessageFactory
public override AbstractMessage CreateMessage()
XmlMessageFactory
using System.Collections.Generic;
namespace Pattern.FactoryMethod
/// XmlMessage工厂(ConcreteCreator)
public class XmlMessageFactory : AbstractMessageFactory
public override AbstractMessage CreateMessage()
client
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class FactoryMethod : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
AbstractMessageFactory amf = new SqlMessageFactory();
AbstractMessage am = amf.CreateMessage();
Response.Write(am.Insert(new MessageModel(“插入”, DateTime.Now)));
Response.Write(am.Get()[].PublishTime.ToString());
amf = new XmlMessageFactory();
Response.Write(am.Insert(new MessageModel(“插入”, DateTime.Now)));
Response.Write(am.Get()[].PublishTime.ToString());
运行结果
True
SQL方式获取Message 2007-5-4 22:34:39
True
XML方式获取Message 2007-5-4 22:34:39
参考
http://www.dofactory.com/Patterns/PatternFactory.aspx
OK