怎么在PHP中实现一个策略模式

  介绍

这篇文章给大家介绍怎么在PHP中实现一个策略模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

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

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

<强>代码如下:

接口文件UserStrategy。php

& lt; php ?//定义接口,我要展示广告和类别   interface  UserStrategy   {//才能显示广告的方法   public 才能;function  showAd ();//才能显示类别的方法   public 才能;function  showCategory ();   }   祝辞;

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

& lt; php ?//强制实现接口中的方法   class  MaleUserStrategy  implements  UserStrategy   {//男才能性用户登录后会显示iphone6s的广告   public 才能;function  showAd ()   {才能   ,,,echo  & # 39; Iphone6s& # 39;;   ,,}//会才能显示电子产品类别   public 才能;function  showCategory ()   {才能   ,,,echo  & # 39;电子产品啊& # 39;;   ,,}   }   祝辞;

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

& lt; php ?   class  FemaleUserStrategy  implements  UserStrategy   {   public 才能;function  showAd ()   {才能   ,,,echo  & # 39; 2016年女装& # 39;;   ,,}   public 才能;function  showCategory ()   {才能   ,,,echo  & # 39;女装& # 39;;   ,,}   }   祝辞;

重点来了,创建首页文件的策略。php

& lt; php ?//如果我想使用上面那些类的话就需要一个文件一个文件的要求,但我们可以使用一种方法来自动加载所需要的文件//首先定义一个基本的文件路径,因为这些文件我都是放在一个文件夹下的   定义(& # 39;BASEDIR& # 39;,, __DIR__);//载入一个自动需要文件的文件,这里我写成config . php   require  & # 39; config . php # 39;;//PHP提供的spl库,这我们就把需要的文件都加载进来了//那么spl_autoload_register()是什么意思呢?其实就是,当程序运行碰到了没有定义的类的时候就会自动执行它里面的函数,所以就把文件加载近来了呀!   spl_autoload_register(& # 39;配置:自动装载# 39;);   class 策略   {//才能定义一个变量来存储策略   protected 才能;_strategy美元;//才能定义展示广告和类别的方法   public 才能;function 指数()   {才能   ,,,echo  & # 39;广告:& # 39;;   ,,,echo  $ this→_strategy→showAd ();   ,,,echo  & # 39; & lt; br/祝辞& # 39;;   ,,,echo  & # 39;类别:& # 39;;   ,,,echo  $ this→_strategy→showCategory ();   ,,}//才能创建不同的策略   public 才能;function  setStrategy(美元策略)   {才能   ,,,这个→美元_strategy =,美元策略;   ,,}   }//实例化对象   $ strategy =, new 战略();//如果$ _GET[& # 39;女# 39;]存在的话就显示女性用户的广告和类别,如果需要添加其它策略的时候只需要在这里加入判断条件就可以了,当然了还需要创建相应策略的类并且一定要去继承接口哦   如果收取($ _GET[& # 39;女# 39;)))   {   时间=美元才能people  new  FemaleUserStrategy ();   }   其他的   {   时间=美元才能people  new  MaleUserStrategy ();   }//把对象传入到策略类里   $ strategy =, setStrategy($人);//显示广告和类别——因为使用了策略模式,当我们需要新增加一个策略的时候这里就不需要修改了。   战略→美元指数();   祝辞;

自动引入文件配置。php

& lt; php ?//这里大家可以看的到,我的文件都是大写开头的,而且每个文件中只有一个类,并且这个类的名字是和文件名一样的,其实这是一种框架的规范,大家有兴趣的话可以查找一下,psr-0规范   class 配置   {//才能定义一个自动引入文件的方法   static 才能;function 自动装载(类)   {才能   ,,,//这里拼接我们需要引入文件的路径   ,,,require  BASEDIR强生# 39;/& # 39;。类强生# 39;美元。php # 39;;   ,,}   }   ?在

怎么在PHP中实现一个策略模式