步骤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,如需转载请自行联系原作者