PHP实现的策略模式示例

2025-05-27 0 47

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

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

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

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

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

代码如下:

接口文件UserStrategy.php

?

1

2

3

4

5

6

7

8

9

10
<?php

//定义接口,我要展示广告和类别

interface UserStrategy

{

//显示广告的方法

public function showAd();

//显示类别的方法

public function showCategory();

}

?>

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
<?php

//强制实现接口中的方法

class MaleUserStrategy implements UserStrategy

{

//男性用户登录后会显示iphone6s的广告

public function showAd()

{

echo 'Iphone6s';

}

//会显示电子产品类别

public function showCategory()

{

echo '电子产品啊';

}

}

?>

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13
<?php

class FemaleUserStrategy implements UserStrategy

{

public function showAd()

{

echo '2016女装';

}

public function showCategory()

{

echo '女装';

}

}

?>

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

?

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
<?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

?

1

2

3

4

5

6

7

8

9

10

11

12
<?php

//这里大家可以看到,我的文件都是大写开头的,而且每个文件中只有一个类,并且这个类的名字是和文件名一样的,其实这是一种框架的规范,大家有兴趣的话可以查找一下,psr-0规范

class Config

{

//定义一个自动引入文件的方法

static function autoload($class)

{

//这里拼接我们需要引入文件的路径

require BASEDIR.'/'.$class.'.php';

}

}

?>

告诫自己在以后的编程中多去考虑,熟能生巧。

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://blog.csdn.net/sinat_21125451/article/details/51184542

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP实现的策略模式示例 https://www.kuaiidc.com/71794.html

相关文章

发表评论
暂无评论