|
简介:
状态模式,属于行为型的设计模式。当一个对象的内在状态发生改变时,允许改变其行为,这个对象看起来像是改变了其类。
适用场景:
- 控制一个对象的状态改变过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类中。
- 一个对象的行为取决于它的状态,并且在运行时刻根据状态改变它的行为时,方便使用状态模式。
优点:
消除复杂的分支语句。
缺点:
增加类的数量,增加复杂度。
代码:
- 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】 我们会及时删除侵权内容,谢谢合作! |
|