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,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值