首页 > 编程语言 >浅谈PHP设计模式的状态模式

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

时间:2023-01-07 22:45:31浏览次数:38  
标签:function status doSth 浅谈 public PHP Order 设计模式 order

简介:

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

适用场景:

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

优点:

消除复杂的分支语句。

缺点:

增加类的数量,增加复杂度。

代码:

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();

标签:function,status,doSth,浅谈,public,PHP,Order,设计模式,order
From: https://www.cnblogs.com/phpphp/p/17033753.html

相关文章

  • 设计模式之美
    设计模式1.为什么要学习设计模式:应对面试中的设计模式相关问题;告别写呗别人吐槽的烂代码;提高复杂代码的设计和开发能力;让读源码、学框架事半功倍;为你的职场发展做......
  • 【PHP正则表达式】
    【PHP正则表达式】最近写题总是遇到php正则表达式的匹配函数,于是进行一个总结。1、什么是正则表达式是php在进行搜索时用于匹配的模式字符串。一般用于php对特定字符序......
  • PHP 函数传值和传引用的区别
    1.函数传值和传引用的区别传值:默认情况下,函数参数通过值传递,所以即使在函数内部改变参数的值也不会改变函数外部的值传引用:就是在函数的参数前面添加 & ......
  • Qt浅谈之一:内存泄露(总结)(转)
    一、简介Qt内存管理机制:Qt在内部能够维护对象的层次结构。对于可视元素,这种层次结构就是子组件与父组件的关系;对于非可视元素,则是一个对象与另一个对象的从属关系......
  • 设计模式-状态变化-State、Memento
    状态模式上述代码缺点:如果增加一个Stat,要加很多ifelse改进方法Memento备忘录模式如果快照多了比如50次redo/需要用到一些复杂的技术,比如序列化......
  • 数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)
    文章目录​​项目说明​​​​一、项目说明​​​​单位信息数据库字段:​​​​资源数据库字段​​​​项目需求​​​​二、项目开发​​​​1.项目分析​​​​2.引入库​......
  • 设计模式学习笔记
    静态工厂工厂方法可以隐藏创建产品的细节,且不一定每次都会真正创建产品,完全可以返回缓存的产品,从而提升速度并减少内存消耗。里氏替换原则返回实现接口的任意子类都可以......
  • 35_Java中的设计模式简单了解
    Java中的设计模式注意:只是简单了解设计模式(Designpattern)​ 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用......
  • PHP 原生EXCEL传入数据库
    1.下载PHPExcel-1.8下载地址:https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8   2.前端页面-通过form表单提交必须设置enctype="multipart/form-data"......
  • 浅谈PHP设计模式的建造者模式
    简介:建造者模式,又称之为生成器模式,属于创建型的设计模式。将一个复杂对象的构建,与它的表示分离,使得同样的构建过程可以创建不同的表示。适用场景:用于创建一些复杂的对象......