这篇文章给大家介绍怎么在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
<?php class FemaleUserStrategy implements UserStrategy { public function showAd() { echo '2016女装'; } public function showCategory() { echo '女装'; } } ?>
重点来了,创建首页文件Strategy.php
<?php //如果我想使用上面那些类的话就需要一个文件一个文件的require,但我们可以使用一种方法来自动加载所需要的文件 //首先定义一个基本的文件路径,因为这些文件我都是放在一个文件夹下的 define('BASEDIR', __DIR__); //载入一个自动require文件的文件,这里我写成Config.php require '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中实现一个策略模式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。