浅谈PHP设计模式的策略模式

简介:

策略模式又叫做政策模式,用于如何组织和调用算法的,是属于行为型模式的一种。
策略模式需要三个角色构成:

  1. Context 封装角色:也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。
  2. Strategy 抽象策略角色:通常为接口,指定规则。
  3. ConcreteStrategy 具体策略角色:实现抽象策略中的操作,该类含有具体的算法。

适用场景:

  1. 优化单元测试,每个测试都有自己独特的算法,可利用策略模式自定义实现。
  2. 实现同一类问题的不同解决方案的场景。

优点:

算法可以通过参数自由切换。
方便扩展,增加策略只需要实现接口就行了。

缺点:

增加类数量。

其它:

与工厂模式的对比:
工厂模式是用来创建对象的。策略模式是如何组织、调用这些算法。结果一样但是初衷不同。

代码:

//定义算法接口 抽象策略角色
interface CalcInterface {
    public function calc($num1, $num2);
}


//定义加法类 具体策略角色
class Add implements CalcInterface {
    public function calc($num1, $num2) {
        return $num1 + $num2;
    }
}


//定义减法类 具体策略角色
class Sub implements CalcInterface {
    public function calc($num1, $num2) {
        return $num1 - $num2;
    }
}


//上下文角色 承上启下
class Context {
    private $strategy;
    public function __construct(CalcInterface $strategy) {
        $this->strategy = $strategy;
    }

    public function run($num1, $num2) {
        return $this->strategy->calc($num1, $num2);
    }
}


//调用端==========================================================
echo (new Context(new Add()))->run(1,2);
echo (new Context(new Sub()))->run(1,2);

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

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

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

相关文章

  • springboot中swagger、异步/定时/邮件任务的问题

    Swagger Swagger是一个开源的API文档工具,用于生成API文档并提供API测试工具。Spring Boot中Swagger可以通过引入相关依赖(如springfox-swagger2和springfox-swagger-ui)来实现。接下来将详细介绍在Spring Boot中如何使用Swagger。 引入Swagger依赖 在pom.xml文件…

    PHP 2023年5月27日
    00
  • php下判断数组中是否存在相同的值array_unique

    首先, array_unique 函数可以用来去除数组中重复的值,返回一个新的数组。如果您想要判断一个数组中是否存在重复的值,您可以通过比较数组去重前后的长度来判断。 示例1:比较数组去重前后的长度来判断是否存在重复值 $array = array(‘a’, ‘b’, ‘c’, ‘d’, ‘c’, ‘e’, ‘a’); $count1 = count($ar…

    PHP 2023年5月26日
    00
  • php url路由入门实例

    我来为你详细讲解“php url路由入门实例”的完整攻略。 1. 什么是URL路由? URL路由,即URL的地址规则。在Web开发中,会根据不同的URL地址,来执行不同的功能。这种将URL地址映射到相应的程序处理逻辑上的处理过程,就被称为URL路由。 2. URL路由的实现方式 URL路由的实现方式主要有两种:基于Rewrite规则和基于PHP的入口脚本。 …

    PHP 2023年5月27日
    00
  • PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码

    PHP是一种广泛使用的服务器端语言,常用于构建web应用和处理数据。在使用PHP时,经常会遇到UTF-8编码问题。在这里,我将为您介绍解决这些问题的完整攻略,包括UTF-8编码,数据库乱码以及页面输出乱码等问题。 UTF-8编码 UTF-8是一种全球适用的编码方式,它可以在Unicode标准下编码任何字符,是Web开发中最常见的编码方式之一。但是,在PHP中…

    PHP 2023年5月27日
    00
  • PHP中通过fopen()函数访问远程文件示例

    当需要在PHP中访问远程文件时,可以使用fopen()函数。使用该函数时需要确保allow_url_fopen选项被设置为On。一旦这个选项被启用,我们就可以访问远程文件,如下所示: $remote_file = fopen(‘http://www.example.com/index.html’, ‘r’); 在这个示例中,我们打开了一个远程HTML文件,同…

    PHP 2023年5月26日
    00
  • PHP+MYSQL论坛程序 Discuz v5.5.0 简体中文版分流下载

    PHP+MYSQL论坛程序 Discuz v5.5.0 简体中文版分流下载攻略 简介 Discuz是一个高效的PHP+MYSQL论坛程序,是国内首屈一指的论坛系统之一。Discuz提供了多种功能,包括发帖、回复、私信、积分、签到等等,且具有良好的可扩展性和安全性。本攻略将为您介绍Discuz的分流下载方法。 准备工作 了解Discuz相关知识,包括安装、配置…

    PHP 2023年5月24日
    00
  • 浅谈php中变量的数据类型判断函数

    我来为你详细讲解 “浅谈 PHP 中变量的数据类型判断函数” 的完整攻略。 什么是变量的数据类型 在 PHP 中,变量是动态类型的。它们的数据类型根据被赋值的值而改变。在编写程序时,我们需要知道变量的数据类型,以便在处理它们时采取不同的措施。PHP 提供了许多函数,可以用于检测和验证数据类型。 浅谈 PHP 中变量的数据类型判断函数 PHP 具有很多数据类型…

    PHP 2023年5月25日
    00
  • PHP输出当前进程所有变量/常量/模块/函数/类的示例

    要在PHP代码中输出当前进程所有变量/常量/模块/函数/类,可通过内置函数 get_defined_vars() 和 get_defined_constants() 来实现,以及使用函数 get_loaded_extensions()、get_defined_functions() 和 get_declared_classes() 来获取相应信息。 下面分别…

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