手机版

PHP中状态模式编程的详细说明

时间:2021-09-08 来源:互联网 编辑:宝哥软件园 浏览:

定义状态模式,也称为状态的对象模式,这是对象的行为模式。状态模式允许对象在其内部状态改变时改变其行为。这个对象看起来好像已经改变了它的类

uml统一模型语言

2015811162847657.jpg  (454146)

state模式中的主要角色抽象State角色:定义一个接口或抽象类状态来封装环境对象特定状态对应的行为具体State角色:每个状态类实现Context的一个状态对应的行为Context角色:定义客户端感兴趣的接口,保留一个具体状态类的实例。这个具体状态类的一个实例给出了这个环境对象的现有状态

考虑在线投票系统的应用。要控制同一个用户,只能投一票。如果用户重复投票,投票次数超过5次,则判定为恶意刷屏。如果他投票超过8次,就需要被列入黑名单。

要使用状态模式,首先要定义投票过程的各种状态,根据上面的描述大致可以分为四种状态:正常投票、恶意投票和黑名单投票。然后创建一个投票管理对象(相当于上下文)

uml统一模型语言

2015811165624664.jpg  (467164)

示例代码

?Php /** *抽象状态类* @ authorwzy * */interface votest {/* * *要实现的公共方法*/public function vote();}/* * *特定状态——正常投票* * @ authorwzy * */class normalvotestate实现votest { public function vote(){ echo '这是正常投票!';}}/* * *具体状态——恶意投票* * @ authorwzy * */class repeat votest implement votest { public function vote(){ echo '这是恶意投票!';}}/* * *具体状态——黑名单投票* * @ authorwzy * */class blockvotestate实现votestate { public function vote(){ echo '这是黑名单投票!';}} /** *上下文角色*/类VoteManager {/** *投票数* * @ var int */private $ vote _ count;/* * * status类实例* * @ varobject */private $ vote实例;/* * *构造函数,初始化成员属性* * @ param int $ count */public function _ _ construct($ count=1){ $ this-vote _ count=$ count;}/* * *客户端调用的接口函数*/公共函数setstate ($ count) {if(!is _ null($ count)){ $ this-vote _ count=$ count;} if($ this-vote _ count 5){ $ this-voteInstance=new NormalVoteState();} else if($ this-vote _ count 8){ $ this-voteInstance=new RepeatVoteState();} else { $ this-voteInstance=new BlockVoteState();} $ this-voteInstance-vote();}}/* * *模拟客户端操作*/$ object=new VoteManager();$ object-SetState(1);echo“br”;$ object-SetState(6);echo“br”;$ object-SetState(10);查看状态模式的状态和行为。所谓对象的状态,通常是指对象实例的属性值;行为指的是对象的功能。具体来说,行为可以主要对应于方法

状态模式的作用是通过维护状态的变化,将状态的行为分离出来,调用不同状态对应的函数。换句话说,状态和行为是相关的,它们的关系可以描述为:状态决定行为

因为状态在运行期间是变化的,所以行为也会随着运行期间状态的变化而变化

环境和状态处理对象在状态模式下,Context是一个持有状态的对象,但是环境本身并不处理与状态相关的行为,而是将处理状态的功能委托给状态对应的状态处理类。

在具体的状态处理中,往往需要获取Context本身的数据,所以可以考虑用抽象类代替接口,这样可能更方便参数的传递

客户端通常只与上下文交互。客户端可以使用状态对象配置上下文。一旦配置完成,就不再需要处理状态对象。通常,客户端不负责操作期间的状态维护,也不负责将来使用哪个特定的状态处理对象

版权声明:PHP中状态模式编程的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。