<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="分享PHP中的状态模式编程（带示例、UML图）" id="card1">
<p> 游客</p><p>
标题:分享PHP中的状态模式编程（带示例、UML图）<br/>
正文:<br/>
定义状态模式，又称状态对象模式(Pattern of Objects for State),状态模式就是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样UML图状态模式中主要角色抽象状态角色（State）：定义一个接口或抽象类State，用以封装环境对象的一个特定的状态所对应的行为具体状态（ConcreteState）角色：每一个状态类都实现了环境(Context)的一个状态所对应的行为环境(Context)角色：定义客户端所感兴趣的接口，并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态使用场景考虑一个在线投票系统的应用，要实现控制同一用户只能投一票，如果一个用户反复投票，而且投票超过5次，则判定为恶意刷票，如果投票超过8次，需要加入黑名单要使用状态模式实现，首先要把投票过程的各种状态定义出来，根据以上描述大致分为四种状态：正常投票，恶意投票，黑名单投票。然后创建一个投票管理对象(相当于Context)UML图 示例代码  &amp;lt;?php    /**   * 抽象状态类   * @author wzy   *   */  interface VoteState  {     /**    * 需要实现的公共方法    */   public function vote ();  }    /**   * 具体状态&amp;mdash;&amp;mdash;正常投票   *   * @author wzy   *     */  class NormalVoteState implements VoteState  {     public function vote ()   {    echo &amp;quot;这是一个正常投票!&amp;quot;;   }  }    /**   * 具体状态&amp;mdash;&amp;mdash;恶意投票   *   * @author wzy   *     */  class RepeatVoteState implements VoteState  {     public function vote ()   {    echo &amp;quot;这是一个恶意投票!&amp;quot;;   }  }    /**   * 具体状态&amp;mdash;&amp;mdash;黑名单<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2171&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2171&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2171&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2171&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=2171&amp;Page=3">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=2171">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=2171">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>