PHP设计模式:策略模式

简介:

步骤1.定义策略接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#UserStrategy.php 用户策略
 
<?php
 
namespace  celvmoshi;
 
/**用户策略接口
  * Interface UserStategy
  * @package celvmoshi
  */
interface  UserStrategy
{
     //显示广告
     public  function  showAd();
 
     //显示分类
     public  function  showCategory();
 
}


步骤2.实现策略业务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#FemaleStrategy.php 女性用户策略
<?php
namespace  celvmoshi;
 
/**女性用户策略
  * Class FemaleStrayegy
  * @package celvmoshi
  */
class  FemaleStrategy  implements  UserStrategy
{
     public  function  showAd()
     {
         echo  "2017 新潮女装\r\n" ;
     }
 
     public  function  showCategory()
     {
         echo  "服装\r\n" ;
     }
}


继续添加策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#MaleStrategy.php 男性用户策略
 
<?php
namespace  celvmoshi;
 
/**男性用户策略
  * Class MaleStrayegy
  * @package celvmoshi
  */
 
class  MaleStrategy  implements  UserStrategy
{
     //显示广告
     public  function  showAd()
     {
         echo  "新款宝马X6\r\n" ;
     }
 
     //显示分类
     public  function  showCategory()
     {
         echo  "小汽车\r\n" ;
     }
}



步骤3.在实际业务场景中运用策略

本实例的业务场景为:根据男女、性用户自动区分广告及分类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#index.php 默认业务访问入口
 
<?php
define( 'ROOT' , __DIR__ .  '/' );
 
//实现自动加载
spl_autoload_register( 'autoload' );
function  autoload( $className )
{
     $arr  explode ( '\\' $className );
     require_once  ROOT . ucfirst( $arr [1]) .  '.php' ;
}
 
class  Page
{
     protected  $strategy ; //显示策略
 
     public  function  index()
     {
         echo  "显示广告:" ;
         $this ->strategy->showAd();
 
         echo  "<hr>" ;
 
         echo  "显示分类:" ;
         $this ->strategy->showCategory();
 
 
     }
 
     //设置显示策略
     public  function  setStrategy(celvmoshi\UserStrategy  $strategy ) //(约定接口类型)
     {
         $this ->strategy =  $strategy ;
     }
}
 
$page  new  Page();
if  (isset( $_GET [ 'female' ])) {
     $userStrategy  new  celvmoshi\FemaleStrategy();
else  if  (isset( $_GET [ 'male' ])) {
     $userStrategy  new  celvmoshi\MaleStrategy();
else  {
     return ;
}
 
$page ->setStrategy( $userStrategy );
$page ->index();



至此已大功告成!











本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/2045866,如需转载请自行联系原作者
目录
相关文章
|
15天前
|
设计模式 算法 PHP
php设计模式--策略模式(六)
php设计模式--策略模式(六)
11 0
|
15天前
|
设计模式 PHP
php设计模式--装饰模式(七)装饰模式完成文章编辑
php设计模式--装饰模式(七)装饰模式完成文章编辑
10 0
|
3月前
|
设计模式 算法 搜索推荐
设计模式之策略模式
设计模式之策略模式
41 0
|
3月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
3月前
|
设计模式 算法 Java
【设计模式】策略模式在数据接收和发送场景的应用
在数据接收和发送场景打算使用了if else进行判断。ASystem.sync("向A同步数据");BSystem.sync("向B同步数据");...非常麻烦,需求多了很臃肿!策略模式(Strategy Pattern)定义了一组同类型的算法,在不同的类中封装起来,每种算法可以根据当前场景相互替换,从而使算法的变化独立于使用它们的客户端(即算法的调用者)。// 创建两个策略对象// 创建上下文对象,并传入策略对象。
59 1
|
4月前
|
设计模式 算法
设计模式思考,简单工厂模式和策略模式的区别?
设计模式思考,简单工厂模式和策略模式的区别?
|
15天前
|
设计模式 PHP
php设计模式--责任链模式(五)
php设计模式--责任链模式(五)
12 0
|
1月前
|
设计模式 算法
策略模式--设计模式
策略模式--设计模式
17 0
|
1月前
|
设计模式 算法 Java
【设计模式】策略模式
【设计模式】策略模式
|
3月前
|
设计模式 算法 自动驾驶
常见的设计模式(模板与方法,观察者模式,策略模式)
随着时间的推移,软件代码越来越庞大,随着而来的就是如何维护日趋庞大的软件系统。在面向对象开发出现之前,使用的是面向过程开发来设计大型的软件程序,面向过程开发将软件分成一个个单独的模块,模块之间使用函数进行组合,最后完成系统的开发,每次需要修改软件,如果不涉及好各个模块的关系,就会导致软件系统难以维护,从而导致软件变得不可使用。面向对象方法用对象模拟问题域中的实体,以对象间的联系刻画实体间联系
63 2