宝哥软件园

学习php设计模式

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

首先,目的是当对象的内部状态改变时,允许对象改变其行为。对象似乎修改了自己的类状态模式,改变的位置在于对象的状态。

二、状态模式结构图。

3.状态模式中的主要角色抽象状态角色:定义一个接口封装环境对象特定状态对应的行为具体状态角色:每个具体状态类实现上下文某个状态对应的行为上下文角色:定义客户端感兴趣的接口,保留一个具体状态类的实例。这个特定状态类的例子给出了这个环境对象的现有状态。4.国家模式的利弊。1.它定位与特定状态相关的行为。2.它使状态转换可见。3.状态对象可以共享。5.状态模式适用于场景。1.一个对象的行为取决于它的状态,它必须在运行时根据它的状态改变它的行为。2.一个操作包含巨大的多分支条件语句,这些分支依赖于对象的状态。这种状态通常由一个或多个枚举常数表示。通常,多个操作包含相同的条件结构。状态模式将每个条件分支放入一个独立的类中。这使您能够根据对象自身的情况将对象的状态作为对象,并且该对象可以独立更改,而不依赖于其他对象。不及物动词状态模式和其他模式singleton模式(Singleton mode):具体的状态对象通常是Singleton模式的flyweight模式:享受模式解释了何时以及如何共享状态对象。七.状态模式的PHP示例。

?Php/** *抽象状态角色*/接口状态{/** *方法示例*/公共函数句柄(context $ context);}/* * *具体状态角色A * singleton类*/类具体状态A实现状态{/*唯一实例*/private static $ _ instance=null;private function _ _ construct(){ }/* * * static factory方法,该方法返回此类的唯一实例*/public static function getinstance(){ if(is _ null(self :3360 $ _ instance)){ self 33603360 $ _ instance=新的具体状态a();}返回self: $ _ instance}公共函数句柄(Context $ Context){ echo ' Concrete Sate A handle method br/';$context-setState(混凝土状态b :3360 getinstance());}}/* * *具体状态角色B * singleton类*/类具体状态B实现状态{/*唯一实例*/private static $ _ instance=null;private function _ _ construct(){ }/* * * static factory方法,该方法返回此类的唯一实例*/public static function getinstance(){ if(is _ null(self :3360 $ _ instance)){ self 33603360 $ _ instance=new concrete statb();}返回self: $ _ instance}公共函数句柄(Context $ Context){ echo ' Concrete Sate B句柄method br/';$context-setState(混凝土状态a :3360 getinstance());}}/* * *环境角色*/类上下文{ private $ _ state/* * *默认为statea */public function _ _ construct(){ $ this-_ state=concrete statea :3360 getinstance();}公共函数setState(State $ State){ $ this-_ State=$ State;} public function request(){ $ this-_ state-handle($ this);} }/* * * client */class client {/* * * main program。*/public static function main(){ $ context=new context();$ content-request();$ content-request();$ content-request();$ content-request();} } client :3360 main();以上是用php实现状态模式的代码,关于状态模式有一些概念上的区分,希望对大家的学习有所帮助。

更多资讯
游戏推荐
更多+