邹老大 发表于 2023-1-7 22:40:10

浅谈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();
来源:https://www.cnblogs.com/phpphp/p/17033753.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 浅谈PHP设计模式的状态模式