本文实例讲述了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
相关文章
猜你喜欢
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-27 48
-
2025-05-29 65
-
2025-05-29 67
-
2025-05-29 51
-
2025-05-29 18
热门评论