浅谈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日

相关文章

  • 正则表达式的语法

    正则表达式的语法 正则表达式是一种用于描述文本模式的表达式,它可以用于匹配或者替换字符串中的文字。正则表达式语法中包含了各种字符、操作符和元字符,用于在字符串中匹配或匹配特定的文本模式。下面是正则表达式的常用语法: 字符 字符是正则表达式的基本元素,它可以是任意一个字符,如数字、字母、符号等等。下面展示一些常用的字符: 字母和数字 [a-z] 代表小写字母 …

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

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

    PHP 2023年5月12日
    00
  • php实现HTML实体编号与非ASCII字符串相互转换类实例

    讲解“php实现HTML实体编号与非ASCII字符串相互转换类实例”的完整攻略。 什么是HTML实体编号? HTML实体编号是将HTML中的特殊字符转换成实体名称或数字的过程。在HTML中,一些字符有特殊的含义,这些特殊字符包括小于号、大于号、引号等。当在HTML中使用这些字符时,需要将它们用实体名称或数字表示,这样浏览器才能正确地显示它们。 为什么需要实现…

    PHP 2023年5月23日
    00
  • PHP实现的多维数组去重操作示例

    PHP实现的多维数组去重操作示例 在PHP中,使用多维数组时,有时候需要对其中的重复元素进行去重操作。下面介绍一些PHP实现的多维数组去重操作示例。 方法一:使用array_map()函数 //定义一个示例数组 $array = array( array(‘id’=>’001’, ‘name’=>’张三’), array(‘id’=>’00…

    PHP 2023年5月26日
    00
  • PHP初学者常见问题集合 修正版(21问答)

    下面是详细讲解“PHP初学者常见问题集合 修正版(21问答)”的完整攻略。 1. 关于PHP 1.1 PHP是什么? PHP是一种开源的服务器端脚本语言,它用于创建动态网页。PHP脚本在服务器执行,生成HTML输出给客户端浏览器。 1.2 PHP的优点是什么? 免费开源,跨平台支持; 易于学习,入门门槛低,语法简单; 功能强大,支持数据库访问、文件操作等; …

    PHP 2023年5月24日
    00
  • 简单的php写入数据库类代码分享

    接下来我将为您详细讲解“简单的PHP写入数据库类代码分享”的完整攻略。 1. 编写数据库连接类 首先,我们需要编写数据库连接的类DB,使用PDO进行数据库连接,并且添加一个execute方法,用于执行SQL语句,代码如下所示: class DB { private $pdo; public function __construct($host,$user,$…

    PHP 2023年5月24日
    00
  • PHP中header函数的用法及其注意事项详解

    具体来讲解一下“PHP中header函数的用法及其注意事项详解”的攻略流程。 什么是header函数 首先,header函数是PHP内置的一种函数,主要用于向客户端发送HTTP头部信息。利用header函数,可以设置网页的状态码、网页编码、缓存、cookie等相关信息,在页面加载过程中起到非常重要的作用。 header函数的基本用法 header函数的基本语…

    PHP 2023年5月26日
    00
  • PHP读取txt文件的内容并赋值给数组的代码

    为了让大家更好理解,我将详细讲解PHP读取txt文件的内容并赋值给数组的完整攻略,包括代码和示例。 一、读取txt文件并将内容存入数组 要读取一个txt文件并将其内容存储在一个数组中,我们可以使用PHP的内置函数file(),该函数将一个文件中的所有行读入一个数组中。 $lines = file(‘file.txt’); 这个代码片段中,file()函数将文…

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