加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

状态模式(State Pattern)

发布时间:2020-12-12 14:37:42 所属栏目:MsSql教程 来源:网络整理
导读:介绍 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。 示例 有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里。在对象内部可以根据用户的不同选择不同的数据持久化方案。 M

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


示例
有一个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

{

????
?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(
插入

????????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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读