当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP实现的策略模式示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-13 22:27:21 浏览: 评论:0 

这篇文章主要介绍了PHP实现的策略模式,简单介绍了策略模式的概念、原理并结合实例形式分析了php策略模式的相关实现与使用技巧,需要的朋友可以参考下。

本文实例讲述了PHP实现的策略模式,分享给大家供大家参考,具体如下:

个人觉得设计模式只有在实际应用中才能够慢慢的去熟悉,到最后做到心中有模式,事事有模式,哈哈

例如:一个电商首页,可以根据登陆用户的性别不同显示不同的内容,比如广告和商品类别。

传统方法:在程序内部使用多个if,else进行判断,这样很难维护,比如我想要再加入一个人妖用户!那么我就要在程序中再加入else if判断,这样写出来的程序看起来很乱,而且不易维护。

策略模式:实现的思想是这样的,创建一个接口,对于每个类别的用户创建一个类,分别去实现接口中的方法,在首页进行判断实例化哪个类。

代码如下:

接口文件UserStrategy.php

  1. <?php 
  2. //定义接口,我要展示广告和类别 
  3. interface UserStrategy 
  4.   //显示广告的方法 
  5.   public function showAd(); 
  6.   //显示类别的方法 
  7.   public function showCategory(); 
  8. ?> 

男性用户的具体显示MaleUserStrategy.php

  1. <?php 
  2. //强制实现接口中的方法 
  3. class MaleUserStrategy implements UserStrategy 
  4.   //男性用户登录后会显示iphone6s的广告 
  5.   public function showAd() 
  6.   { 
  7.     echo 'Iphone6s'
  8.   } 
  9.   //会显示电子产品类别 
  10.   public function showCategory() 
  11.   { 
  12.     echo '电子产品啊'
  13.   } 
  14. ?> 

女性用户的具体显示FemaleUserStrategy.php

  1. <?php 
  2. class FemaleUserStrategy implements UserStrategy 
  3.   public function showAd() 
  4.   { 
  5.     echo '2016女装'
  6.   } 
  7.   public function showCategory() 
  8.   { 
  9.     echo '女装'
  10.   } 
  11. ?> 

重点来了,创建首页文件Strategy.php

  1. <?php 
  2. //如果我想使用上面那些类的话就需要一个文件一个文件的require,但我们可以使用一种方法来自动加载所需要的文件 
  3. //首先定义一个基本的文件路径,因为这些文件我都是放在一个文件夹下的 
  4. define('BASEDIR', __DIR__); 
  5. //载入一个自动require文件的文件,这里我写成Config.php 
  6. require 'Config.php'
  7. //PHP提供的spl库,这我们就把需要的文件都加载进来了 
  8. //那么spl_autoload_register()是什么意思呢?其实就是,当程序运行碰到了没有定义的类的时候就会自动执行它里面的函数,所以就把文件加载近来了呀! 
  9. spl_autoload_register('Config::autoload'); 
  10. class Strategy 
  11.   //定义一个变量来存储策略 
  12.   protected $_strategy
  13.   //定义展示广告和类别的方法 
  14.   public function index() 
  15.   { 
  16.     echo 'Ad:'
  17.     echo $this->_strategy->showAd(); 
  18.     echo '<br/>'
  19.     echo 'Category:'
  20.     echo $this->_strategy->showCategory(); 
  21.   } 
  22.   //创建不同的策略 
  23.   public function setStrategy($strategy
  24.   { 
  25.     $this->_strategy = $strategy
  26.   } 
  27. //实例化对象 
  28. $strategy = new Strategy(); 
  29. //如果$_GET['female']存在的话就显示女性用户的广告和类别--如果需要添加其它策略的时候只需要在这里加入判断条件就可以了,当然了还需要创建相应策略的类并且一定要去继承接口哦 
  30. if(isset($_GET['female'])) 
  31.   $people = new FemaleUserStrategy(); 
  32. else 
  33.   $people = new MaleUserStrategy(); 
  34. //把对象传入到策略类里 
  35. $strategy = setStrategy($people); 
  36. //显示广告和类别--因为使用了策略模式,当我们需要新增加一个策略的时候这里就不需要修改了。 
  37. $strategy->index(); 
  38. ?> 

自动引入文件Config.php

  1. <?php 
  2. //这里大家可以看到,我的文件都是大写开头的,而且每个文件中只有一个类,并且这个类的名字是和文件名一样的,其实这是一种框架的规范,大家有兴趣的话可以查找一下,psr-0规范 
  3. class Config 
  4.   //定义一个自动引入文件的方法 
  5.   static function autoload($class
  6.   { 
  7.     //这里拼接我们需要引入文件的路径 
  8.     require BASEDIR.'/'.$class.'.php'
  9.   } 
  10. ?>

Tags: PHP策略模式

分享到: