浅谈php设计模式的状态模式选择(浅谈PHP设计模式的状态模式)
导读:简介: 状态模式,属于行为型的设计模式。当一个对象的内在状态发生改变时,允许改变其行为,这个对象看起来像是改变了其类。 适用场景: 控制一个对象的状态改变过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类中。 一个对象的行为取决于它的状态,并且在运行时刻根据状...
简介:
状态模式 ,属于行为型的设计模式 。当一个对象的内在状态发生改变时 ,允许改变其行为 ,这个对象看起来像是改变了其类 。
适用场景: 控制一个对象的状态改变过于复杂时 ,把状态的判断逻辑转移到表示不同状态的一系列类中 。 一个对象的行为取决于它的状态 ,并且在运行时刻根据状态改变它的行为时 ,方便使用状态模式 。 优点:消除复杂的分支语句 。
缺点:增加类的数量 ,增加复杂度 。
代码: abstract class State { abstract function doSth(Order $order); } class ZeroStatus extends State { public function doSth(Order $order) { if($order->status == 0) { echo "已下单\n"; } else { $order->setObj(new OneStatus()); $order->doSth(); } } } class OneStatus extends State { public function doSth(Order $order) { if($order->status == 1) { echo "已支付\n"; } else { $order->setObj(new TwoStatus()); $order->doSth(); } } } class TwoStatus extends State { public function doSth(Order $order) { if($order->status == 2) { echo "待收货\n"; } else { echo "..."; } } } class Order { private $obj; public $status; public function __construct() { $this->obj = new ZeroStatus(); } public function setObj(State $state) { $this->obj = new $state; } public function setStatus($status) { $this->status = $status; } public function doSth() { $this->obj->doSth($this); } } $order = new Order(); $order->setStatus(0); $order->doSth(); $order->setStatus(1); $order->doSth(); $order->setStatus(2); $order->doSth(); $order->setStatus(3); $order->doSth();创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!