乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

时间:2022-09-09 09:28:01
[索引页]
[源码下载]


乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

作者: webabcd


介绍
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。


示例
有一个Message实体类,对它的操作有Get()方法,每次Get()之前要使用ValidateUser()方法来检查当前用户是否有权限,获取数据可能在SqlServer数据库中或Xml文件里。(这里先检查用户的权限,再获取数据就是算法的骨架,获取数据延迟到子类中实现)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)


MessageModel
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)using System;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Collections.Generic;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Text;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
namespace Pattern.TemplateMethod
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// Message实体类
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// </summary>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    public class MessageModel
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 构造函数
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <param name="msg">Message内容</param>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <param name="pt">Message发布时间</param>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public MessageModel(string msg, DateTime pt)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
this._message = msg;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
this._publishTime = pt;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
private string _message;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// Message内容
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public string Message
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
get return _message; }
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
set { _message = value; }
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
private DateTime _publishTime;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// Message发布时间
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public DateTime PublishTime
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
get return _publishTime; }
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
set { _publishTime = value; }
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)}

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

AbstractMessageTemplate
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)using System;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Collections.Generic;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Text;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
namespace Pattern.TemplateMethod
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// 模板方法抽象类
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// </summary>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    public abstract class AbstractMessageTemplate
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// UserId
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        protected string _userId;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 构造函数
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <param name="userId">UserId</param>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public AbstractMessageTemplate(string userId)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
this._userId = userId;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)       
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 验证用户是否合法
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <returns></returns>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public virtual bool ValidateUser()
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
if (this._userId == "admin")
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)                
return true;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
else
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)                
return false;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 获取MessageModel列表
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <returns></returns>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public abstract List<MessageModel> Get();
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 模板方法:先验证用户是否合法,再获取MessageModel列表
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <returns></returns>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public List<MessageModel> TemplateMethodGet()
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
if (ValidateUser())
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)                
return Get();
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
else
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)                List
<MessageModel> l = new List<MessageModel>();
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)                l.Add(
new MessageModel("无权获取", DateTime.Now));
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)                
return l;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)}

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

SqlMessage
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)using System;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Collections.Generic;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Text;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
namespace Pattern.TemplateMethod
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// Sql方式操作Message
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// </summary>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    public class SqlMessage : AbstractMessageTemplate
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 构造函数
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <param name="userId">UserId</param>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public SqlMessage(string userId)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            : 
base(userId)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 获取Message
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <returns></returns>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public override List<MessageModel> Get()
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            List
<MessageModel> l = new List<MessageModel>();
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            l.Add(
new MessageModel("SQL方式获取Message", DateTime.Now));
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
return l;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)}

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

XmlMessage
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)using System;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Collections.Generic;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Text;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
namespace Pattern.TemplateMethod
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// Xml方式操作Message
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
/// </summary>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    public class XmlMessage : AbstractMessageTemplate
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 构造函数
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <param name="userId">UserId</param>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public XmlMessage(string userId)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            : 
base(userId)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// 获取Message
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// </summary>
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
/// <returns></returns>

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        public override List<MessageModel> Get()
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            List
<MessageModel> l = new List<MessageModel>();
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            l.Add(
new MessageModel("XML方式获取Message", DateTime.Now));
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)            
return l;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)}

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)


client
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)using System;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Data;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Configuration;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Collections;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Web;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Web.Security;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Web.UI;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Web.UI.WebControls;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Web.UI.WebControls.WebParts;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using System.Web.UI.HtmlControls;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
using Pattern.TemplateMethod;
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
public partial class TemplateMethod : System.Web.UI.Page
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
protected void Page_Load(object sender, EventArgs e)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    
{
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        AbstractMessageTemplate m 
= new XmlMessage("user");
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        Response.Write(m.TemplateMethodGet()[
0].Message + " " + m.TemplateMethodGet()[0].PublishTime.ToString());
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        Response.Write(
"<br />");
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        m 
= new SqlMessage("admin");
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        Response.Write(m.TemplateMethodGet()[
0].Message + " " + m.TemplateMethodGet()[0].PublishTime.ToString());
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)        Response.Write(
"<br />");
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)    }

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)}

乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)

运行结果
无权获取 2007-3-13 22:29:55
SQL方式获取Message 2007-3-13 22:29:55


参考
http://www.dofactory.com/Patterns/PatternTemplate.aspx


OK
[源码下载]