时间:2021-05-26
本文实例讲述了PHP实现的策略模式。分享给大家供大家参考,具体如下:
个人觉得设计模式只有在实际应用中才能够慢慢的去熟悉,到最后做到心中有模式,事事有模式,哈哈
例如:一个电商首页,可以根据登陆用户的性别不同显示不同的内容,比如广告和商品类别。
传统方法:在程序内部使用多个if,else进行判断,这样很难维护,比如我想要再加入一个人妖用户!那么我就要在程序中再加入else if判断,这样写出来的程序看起来很乱,而且不易维护。
策略模式:实现的思想是这样的,创建一个接口,对于每个类别的用户创建一个类,分别去实现接口中的方法,在首页进行判断实例化哪个类。
代码如下:
接口文件UserStrategy.php
<?php//定义接口,我要展示广告和类别interface UserStrategy{ //显示广告的方法 public function showAd(); //显示类别的方法 public function showCategory();}?>男性用户的具体显示MaleUserStrategy.php
<?php//强制实现接口中的方法class MaleUserStrategy implements UserStrategy{ //男性用户登录后会显示iphone6s的广告 public function showAd() { echo 'Iphone6s'; } //会显示电子产品类别 public function showCategory() { echo '电子产品啊'; }}?>女性用户的具体显示FemaleUserStrategy.php
<?phpclass FemaleUserStrategy implements UserStrategy{ public function showAd() { echo '2016女装'; } public function showCategory() { echo '女装'; }}?>重点来了,创建首页文件Strategy.php
<?php//如果我想使用上面那些类的话就需要一个文件一个文件的require,但我们可以使用一种方法来自动加载所需要的文件//首先定义一个基本的文件路径,因为这些文件我都是放在一个文件夹下的define('BASEDIR', __DIR__);//载入一个自动require文件的文件,这里我写成Config.phprequire 'Config.php';//PHP提供的spl库,这我们就把需要的文件都加载进来了//那么spl_autoload_register()是什么意思呢?其实就是,当程序运行碰到了没有定义的类的时候就会自动执行它里面的函数,所以就把文件加载近来了呀!spl_autoload_register('Config::autoload');class Strategy{ //定义一个变量来存储策略 protected $_strategy; //定义展示广告和类别的方法 public function index() { echo 'Ad:'; echo $this->_strategy->showAd(); echo '<br/>'; echo 'Category:'; echo $this->_strategy->showCategory(); } //创建不同的策略 public function setStrategy($strategy) { $this->_strategy = $strategy; }}//实例化对象$strategy = new Strategy();//如果$_GET['female']存在的话就显示女性用户的广告和类别--如果需要添加其它策略的时候只需要在这里加入判断条件就可以了,当然了还需要创建相应策略的类并且一定要去继承接口哦if(isset($_GET['female'])){ $people = new FemaleUserStrategy();}else{ $people = new MaleUserStrategy();}//把对象传入到策略类里$strategy = setStrategy($people);//显示广告和类别--因为使用了策略模式,当我们需要新增加一个策略的时候这里就不需要修改了。$strategy->index();?>自动引入文件Config.php
<?php//这里大家可以看到,我的文件都是大写开头的,而且每个文件中只有一个类,并且这个类的名字是和文件名一样的,其实这是一种框架的规范,大家有兴趣的话可以查找一下,psr-0规范class Config{ //定义一个自动引入文件的方法 static function autoload($class) { //这里拼接我们需要引入文件的路径 require BASEDIR.'/'.$class.'.php'; }}?>告诫自己在以后的编程中多去考虑,熟能生巧。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP设计模式之策略模式原理与用法。分享给大家供大家参考,具体如下:策略模式(StrategyPattern)策略模式是对象的行为模式,用意是对一
本文实例讲述了php策略模式。分享给大家供大家参考,具体如下:策略模式和工厂模式很像。工厂模式:着眼于得到对象,并操作对象。策略模式:着重得到对象某方法的运行结
本文实例讲述了php策略模式原理与应用。分享给大家供大家参考,具体如下:策略模式简单理解就是有n个做法供你选择,根据你的需要选择某个策略得到结果就应用场景来说:
本文实例讲述了PHP实现的数据对象映射模式。分享给大家供大家参考,具体如下:还是代码说话:这里还是遵循策略模式的psr-0代码规范数据表:数据库连接文件Db.p
策略模式是一种行为模式。用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略。策略模式也被称作政策模式。实现过程为