PHP策略模式写法


Posted in PHP onApril 01, 2021

1、创建抽象策略接口

interface GoodsStrategy{
    public function modifyState();
}

2、编写需要的算法类

class SupplerCommodityPoolClass implements GoodsStrategy{
    protected $goodsObj;
    protected $publicGoodsSaveObj;

    public function __construct(PublicGoodsSave $publicGoodsSaveObj,Goods $goodsObj)
    {
        $this->publicGoodsSaveObj = $publicGoodsSaveObj;
        $this->goodsObj = $goodsObj;
    }

    public function modifyState(){
    	//做你想要的处理
    }
        
}
class SupplerCommodityPoolClass_1 implements GoodsStrategy{
    protected $goodsObj;
    protected $publicGoodsSaveObj;

    public function __construct(PublicGoodsSave $publicGoodsSaveObj,Goods $goodsObj)
    {
        $this->publicGoodsSaveObj = $publicGoodsSaveObj;
        $this->goodsObj = $goodsObj;
    }

    public function modifyState(){
    	//做你想要的处理
    }
        
}
class SupplerCommodityPoolClass_2 implements GoodsStrategy{
    protected $goodsObj;
    protected $publicGoodsSaveObj;

    public function __construct(PublicGoodsSave $publicGoodsSaveObj,Goods $goodsObj)
    {
        $this->publicGoodsSaveObj = $publicGoodsSaveObj;
        $this->goodsObj = $goodsObj;
    }

    public function modifyState(){
    	//做你想要的处理
    }
        
}

3、编写配置类

class GoodsConfig{
    public $config;

    public function __construct(GoodsStrategy $config){
        $this->config = $config;
    }

    public function doWork(){
        return $this->config->modifyState();
    }
}

4、调用(客户端调用,由客户自己决定使用哪种策略,即客户自行实例化算法类)

//$reClass = new GoodsConfig(new SupplerCommodityPoolClass_1());
//$reClass = new GoodsConfig(new SupplerCommodityPoolClass_2());等
$reClass = new GoodsConfig(new SupplerCommodityPoolClass());
$reClass->doWork();

这样就完美的实现了策略模式

PHP 相关文章推荐
CodeIgniter php mvc框架 中国网站
May 26 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
apache和PHP如何整合在一起
Oct 12 PHP
php+ajax实现无刷新分页
Nov 18 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
php中pcntl_fork详解
Apr 01 #PHP
php 解析非标准json、非规范json
Apr 01 #PHP
php 原生分页
Apr 01 #PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 #PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 #PHP
WordPress多语言翻译插件 - WPML使用教程
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
You might like
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
python实现简单的TCP代理服务器
2014/10/08 Python
Python切换pip安装源的方法详解
2016/11/18 Python
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
MADE法国:提供原创设计师家具
2018/09/18 全球购物
简历的个人自我评价范文
2014/01/03 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
初中教师个人工作总结
2015/02/10 职场文书
公司员工体检通知
2015/04/21 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript