﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-乱八七糟的代码-随笔分类-Design Pattern</title><link>http://www.cppblog.com/zqsand/category/12851.html</link><description>啥是子标题</description><language>zh-cn</language><lastBuildDate>Wed, 20 Jan 2010 11:25:07 GMT</lastBuildDate><pubDate>Wed, 20 Jan 2010 11:25:07 GMT</pubDate><ttl>60</ttl><item><title>State 模式</title><link>http://www.cppblog.com/zqsand/archive/2009/12/29/104405.html</link><dc:creator>rikisand</dc:creator><author>rikisand</author><pubDate>Tue, 29 Dec 2009 13:25:00 GMT</pubDate><guid>http://www.cppblog.com/zqsand/archive/2009/12/29/104405.html</guid><wfw:comment>http://www.cppblog.com/zqsand/comments/104405.html</wfw:comment><comments>http://www.cppblog.com/zqsand/archive/2009/12/29/104405.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zqsand/comments/commentRss/104405.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zqsand/services/trackbacks/104405.html</trackback:ping><description><![CDATA[

<p><font face="微软雅黑" color="#0080ff" size="4">STATE 模式：</font></p> <p><font face="微软雅黑" color="#0080ff" size="4">一个对象的行为取决于他的状态，而且它必须在运行时根据状态改变他的行为。常规实现中，一个操作含有庞大的多分支的条件语句，且这些分支依赖于该对象的状态。这个状态通常使用一个或者多个枚举常量表示。STate模式把这些状态时候的对象看做一个独立的对象，也就是将不同状态时的行为分散到相应的状态类中。要达到这样的效果，需要context，也就是状态的持有者，即原先的类；抽象状态类，他封装了与context交互的接口；具体状态类，也就是一个个的具体状态。context中保存一个抽象状态类对象为成员，并delegate对象行为给他，从而使相应状态下的行为代码生效。如果状态改变的准则不是固定的则state状态类同时应该重写changestate类以控制状态的改变，否则可以在context中实现。</font></p> <p><font face="微软雅黑" color="#0080ff" size="4">具体到我们的项目：</font></p> <p><font face="微软雅黑" color="#0080ff" size="4">每一个device即为context，他拥有一个state对象，device中的函数processMsg(){state-&gt;processMSg();} 由于状态改变的规则依赖于收到的消息，也就是说一个状态可能转换到多个状态device的每个状态需要重写statechange方法，stateChange(){state-&gt;stateChange(this，msg);} 这样，不同的状态下的行为实现在具体状态的类中，比原先的版本清晰明了，可读性更强。</font></p><img src ="http://www.cppblog.com/zqsand/aggbug/104405.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zqsand/" target="_blank">rikisand</a> 2009-12-29 21:25 <a href="http://www.cppblog.com/zqsand/archive/2009/12/29/104405.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>