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

yizhihongxing

简介:

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

适用场景:

  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简单实现合并2个数字键数组值的方法

    下面是实现合并两个数字键数组值的方法的完整攻略,包括代码示例。 一、问题描述 在PHP中,当需要合并两个数字键数组的值时,需要将两个数组内部的相同键名的值进行合并,否则直接进行合并,生成一个新的数组。例如,合并数组[1,2,3]和[4,5,6,7]后,得到的新数组应为[1,2,3,4,5,6,7]。 二、实现方法 为了实现这个功能,我们可以使用array_m…

    PHP 2023年5月26日
    00
  • PHP服务器端API原理及示例讲解(接口开发)

    标题:PHP 服务器端 API 原理及示例讲解 什么是服务器端 API 服务器端 API 是指能够在服务器端响应请求的一系列接口和协议,用于实现服务器端与客户端之间的数据传输,方便不同系统之间的交互和数据共享。 PHP 服务器端 API 的原理 PHP 是一种服务器端编程语言,具有强大的服务器端编程能力,因此被广泛应用于 Web 应用程序的开发中,同时也成为…

    PHP 2023年5月23日
    00
  • PHP中的闭包function() use() {}使用场景和技巧

    闭包(Closure)是PHP中的一种特殊的函数,它可以访问外部作用域中的变量,并且可以在函数调用结束后保持对这些变量的访问。在PHP中,我们可以使用闭包来实现一些高级的编程技巧和设计模式。下面是一些使用闭包的场景和技巧。 1. 使用闭包实现延迟绑定 在PHP中,如果在一个类的方法中使用$this关键字访问类的属性或方法,那么$this关键字会绑定到对象。但…

    PHP 2023年5月12日
    00
  • php实现通过ftp上传文件

    通过 FTP(File Transfer Protocol)上传文件是一种常见的操作,可以通过 PHP 实现,下面详细讲解如何通过 PHP 实现通过 FTP 上传文件。 安装 FTP 扩展 在 PHP 中实现 FTP 上传文件需要安装 FTP 扩展,并在 PHP 配置文件中启用该扩展。如果您使用的是 Linux 系统,则可以通过以下命令安装 FTP 扩展: …

    PHP 2023年5月26日
    00
  • php简单实现无限分类树形列表的方法

    下面我来详细讲解“PHP简单实现无限分类树形列表的方法”的完整攻略。 准备工作 在开始实现“无限分类树形列表”的代码之前,我们需要准备一下相关的文件和工具: PHP开发环境 数据库(MySQL、Oracle等) 数据库管理工具(Navicat等) 数据库设计 本次示例我们使用MySQL数据库,共设计两张表: category表:用于存储分类信息,包含字段:i…

    PHP 2023年5月26日
    00
  • PHP中“=>

    在PHP中,”=>”符号是数组键值对中使用的。它被用于连接数组中的键和对应的值。下面是完整的攻略: 简介 PHP中的”=>”是一个指向符号,它用于将一个键名和值连在一起,形成一个键值对。”=>”符号是在数组中使用。在PHP中,数组通常是从一个键引用到一个值。 用法 PHP中的”=>”符号通常是使用在键值对中的。语法如下: $array…

    PHP 2023年5月23日
    00
  • php输出金字塔的2种实现方法

    下面是“php输出金字塔的2种实现方法”的完整攻略。 1. 方法一:使用for循环实现 利用for循环打印出金字塔的步骤 定义一个变量 $n,代表金字塔的层数; 利用 for 循环使程序输出金字塔结构; for循环中需要再套一个循环,控制每一行中*号和空格的数量; 利用 echo 打印出金字塔的每一行; 完成循环后输出整个金字塔。 代码实现 以下是 PHP …

    PHP 2023年5月26日
    00
  • 在VSCode中配置PHP开发环境的实战步骤

    以下是“在VSCode中配置PHP开发环境的实战步骤”的完整使用攻略,包括环境搭建、插件安装和示例说明等内容。 环境搭建 在VSCode中配置PHP开发环境需要安装PHP解释器和Web服务器。以下是一个示例,演示如何在Windows系统中搭建PHP开发环境: 下载解释器 在PHP官网(https://windows.php.net/download/)下载P…

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