微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

状态模式State Pattern

介绍
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。


示例
一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在sqlServer数据库中或Xml文件里。在对象内部可以根据用户的不同选择不同的数据持久化方案。




MessageModel

using  System;

 System.Collections.Generic;

 System.Text;


namespace  Pattern.State

{

    
/// <summary>

    
 Message实体类

    
</summary>

    public class MessageModel

    
{

        

        
 构造函数

        
</summary><param name="msg">Message内容</param>

        
<param name="pt">Message发布时间</param>

         MessageModel(string msg, DateTime pt)

        
{

            
this._message = msg;

            
._publishTime  pt;

        }


        
private _message;

        
 Message内容

        
 Message

        
{

            
get return _message; }

            
set { _message  value; }

        }
 DateTime _publishTime;

        
 Message发布时间

        
 DateTime PublishTime

        
{

            
  _publishTime; }

            
 { _publishTime 

    }

}


AbstractMessageState

 Pattern.State

{

    
 状态模式抽象类

    
abstract AbstractMessageState

    
{

        
 Context类型

        
protected Message _message;


        
 Context类型属性

        
 Message Message

        
{

            
 

            
 


        
 改变状态

        
void StateChangeCheck();


        
 获取Message

        
<returns></returns>

 List<MessageModel> Get();


        
 插入Message

        
<param name="mm">Message实体对象bool Insert(MessageModel mm);

    }

XmlMessage

 Pattern.State

@H_20_502@{

    
 Xml方式操作Message

    
 XmlMessage : AbstractMessageState

    
{

        
<param name="message">Context类型参数 XmlMessage(Message message)

        
 message;

        }


        
override StateChangeCheck()

        
// 如果UserId是admin则变换状态为sqlMessage

            if (._message.UserId =="admin)

            
{

                
._message.AbstractMessageState new sqlMessage(._message);

            }


        
 Get()

        
{

            List
 l ();

            l.Add(
XML方式获取Message, DateTime.Now));


            
 l;

        }


        
 Insert(MessageModel mm)

        
 代码true;

        }

sqlMessage

 Pattern.State

 sql方式操作Message

    
 sqlMessage : AbstractMessageState

    
 sqlMessage(Message message)

        
 StateChangeCheck()

        
{


        }


        
 Get()

        
sql方式获取Message


        
 Insert(MessageModel mm)

        

Message

 Pattern.State

{

    
 Context类

    
 Message

    
{

        
 类型为状态模式抽象类的私有变量

        
 AbstractMessageState _abstractMessageState;


        
 类型为状态模式抽象类的属性

        
 AbstractMessageState AbstractMessageState

        
{

            
  _abstractMessageState; }

            
 { _abstractMessageState        


        
 UserId私有变量

        
 _userId;


        
 UserId

        
 UserId

        
{

            
  _userId; }

            
 { _userId 


        
<param name="userId">UserId Message( userId)

        
._userId  userId;


            _abstractMessageState 
 XmlMessage();

        }


        
 Get()

        
 修改状态            _abstractMessageState.StateChangeCheck();


            
 _abstractMessageState.Get();

        }


        
 Insert(MessageModel mm)

        
 _abstractMessageState.Insert(mm);

        }


client

 System.Data;

 System.Configuration;

 System.Collections;

 System.Web;

 System.Web.Security;

 System.Web.UI;

 System.Web.UI.WebControls;

 System.Web.UI.WebControls.WebParts;

 System.Web.UI.HtmlControls;


 Pattern.State;


public  partial  class  State : System.Web.UI.Page

{

    
 Page_Load(object sender, EventArgs e)

    
{

        Message m 
);

        Response.Write(m.Insert(
插入Now)));

        Response.Write(
<br />);

        Response.Write(m.Get()[
0].Message + m.Get()[].PublishTime.ToString());

        Response.Write(
);


        m 
user);

    }

运行结果
True
sql方式获取Message 2007-3-6 22:58:17
True
XML方式获取Message 2007-3-6 22:58:17


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐