翼度科技»论坛 编程开发 PHP 查看内容

浅谈PHP设计模式的状态模式

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
简介:

状态模式,属于行为型的设计模式。当一个对象的内在状态发生改变时,允许改变其行为,这个对象看起来像是改变了其类。
适用场景:


  • 控制一个对象的状态改变过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类中。
  • 一个对象的行为取决于它的状态,并且在运行时刻根据状态改变它的行为时,方便使用状态模式。
优点:

消除复杂的分支语句。
缺点:

增加类的数量,增加复杂度。
代码:
  1. abstract class State {
  2.     abstract function doSth(Order $order);
  3. }
  4. class ZeroStatus extends State {
  5.     public function doSth(Order $order) {
  6.         if($order->status == 0) {
  7.             echo "已下单\n";
  8.         } else {
  9.             $order->setObj(new OneStatus());
  10.             $order->doSth();
  11.         }
  12.     }
  13. }
  14. class OneStatus extends State {
  15.     public function doSth(Order $order) {
  16.         if($order->status == 1) {
  17.             echo "已支付\n";
  18.         } else {
  19.             $order->setObj(new TwoStatus());
  20.             $order->doSth();
  21.         }
  22.     }
  23. }
  24. class TwoStatus extends State {
  25.     public function doSth(Order $order) {
  26.         if($order->status == 2) {
  27.             echo "待收货\n";
  28.         } else {
  29.             echo "...";
  30.         }
  31.     }
  32. }
  33. class Order {
  34.     private $obj;
  35.     public $status;
  36.     public function __construct() {
  37.         $this->obj = new ZeroStatus();
  38.     }
  39.     public function setObj(State $state) {
  40.         $this->obj = new $state;
  41.     }
  42.     public function setStatus($status) {
  43.         $this->status = $status;
  44.     }
  45.     public function doSth() {
  46.         $this->obj->doSth($this);
  47.     }
  48. }
  49. $order = new Order();
  50. $order->setStatus(0);
  51. $order->doSth();
  52. $order->setStatus(1);
  53. $order->doSth();
  54. $order->setStatus(2);
  55. $order->doSth();
  56. $order->setStatus(3);
  57. $order->doSth();
复制代码
来源:https://www.cnblogs.com/phpphp/p/17033753.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具