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

简介:

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

适用场景:

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

原文链接:https://www.cnblogs.com/phpphp/p/17033753.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈PHP设计模式的状态模式 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 浅析关于PHP位运算的简单权限设计

    下面是针对“浅析关于PHP位运算的简单权限设计”的详细攻略: 什么是位运算? 在计算机科学中,位运算是对二进制数码直接进行操作的一种技术。PHP中常用的位运算符包括位与(&)、位或(|)、位非(~)、位异或(^)等。 如何设计简单权限系统? 位运算可用于设计简单的权限系统。假设有以下管理员用户角色: 超级管理员:管理员拥有全部权限。 普通管理员:管理…

    PHP 2023年5月26日
    00
  • PHP实现的回溯算法示例

    接下来我会详细讲解一下“PHP实现的回溯算法示例”的完整攻略。 什么是回溯算法 回溯算法是在计算机科学领域中的一种重要算法。回溯算法是一种递归算法,它尝试寻找所有的解决方案,并输出最终解决方案。在寻找解决方案的同时,回溯算法也会用到剪枝技巧,以提高算法效率。 PHP实现回溯算法示例 下面是一个示例,演示如何实现用回溯算法在数组中查找目标值的完整过程: fun…

    PHP 2023年5月26日
    00
  • php函数之strtr和str_replace的用法详解以及效率分析 原创

    PHP函数之strtr和str_replace的用法详解以及效率分析 str_replace str_replace 函数用于替换字符串中的某些字符。它可以用于一个或多个字符的替换,也可以用于数组和字符串的替换。 mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, in…

    PHP 2023年5月26日
    00
  • 微课通如何录制微课 微课通录制电脑屏幕及网络课程教程

    微课通如何录制微课 简介 微课通是一款针对微课教学制作的移动应用,支持用户通过手机或平板电脑进行微课的制作和分享。本文将详细讲解微课通如何录制微课,包括录制电脑屏幕及网络课程教程等内容。 准备工作 在进行微课录制前,需要进行以下准备工作: 下载安装微课通应用; 准备要录制的内容,并确保电脑及网络连接良好; 准备好麦克风或外接麦克风,以确保录制的音频质量。 录…

    PHP 2023年5月26日
    00
  • php实现图片上传并进行替换操作

    下面是php实现图片上传并进行替换操作的完整攻略: 1. 准备工作 在进行图片上传和替换操作之前,我们需要先创建一个上传表单,表单中包含一个用于选择文件的input和一个用于提交表单的button。同时我们需要准备一个接收表单数据的php文件,用于处理上传操作并进行替换。 示例表单代码如下: <form action="upload.php&…

    PHP 2023年5月27日
    00
  • PHP在线书签系统分享

    下面就是 PHP 在线书签系统分享的完整攻略。 简介 PHP在线书签系统是一个基于 PHP 和 MySQL 数据库开发的一个典型的读写分离开源项目。它可以方便地帮助用户存储和分享自己每天学习和浏览网络时所找到的精彩网络资源。相信在不少人的工作和学习中都会有不少需要整理并永久保存书签的需求。本系统就是为了更好地解决这一问题而开发的。 安装步骤 以下是该系统的安…

    PHP 2023年5月24日
    00
  • php中return的用法实例分析

    下面就是关于“php中return的用法实例分析”的详细讲解攻略。 什么是return 在 PHP 中,return 是用于从函数中返回值的关键字。当执行 return 时,它立即结束当前函数的执行,并返回一个值。在很多编程语言中,return 的用途相似。return 可以返回任意类型的值,可以是整数、浮点、字符、数组、对象等。 返回值的用途 return…

    PHP 2023年5月26日
    00
  • 详解php中的implements 使用

    下面是关于”详解php中的implements使用”的攻略: 什么是implements? 在 PHP 中,implements是用于实现接口的关键字。 implements关键字后面跟着的是一个或多个接口的名称,用逗号分隔。 实现接口后,需要在类中实现接口定义的所有方法,才能被称为“实现”这个接口。 如何使用implements? 在 PHP 中使用 im…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部