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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

/**
* 观察者接口
*/
interface StrategyInterface
{
/**
* 行为
* @return void
*/
public function doSomething();
}

/**
* 观察者实体类示例1
*/
class StrategyExampleOne implements StrategyInterface
{
/**
* 行为
* @return mixed
*/
public function doSomething()
{
echo "你选择了策略1 \n";
}
}

/**
* 观察者实体类示例2
*/
class StrategyExampleTwo implements StrategyInterface
{
/**
* 行为
* @return mixed
*/
public function doSomething()
{
echo "你选择了策略2 \n";
}
}

/**
* 实体类
*
* 依赖外部不同策略的实体类
*/
class Substance
{
/**
* 策略实例
* @var object
*/
private $_strategy;

/**
* 构造函数
* 初始化策略
*
* @param Strategy $strategy 策略实例
*/
public function __construct(StrategyInterface $strategy)
{
$this->_strategy = $strategy;
}

/**
* 模拟一个操作
*
* @return mixed
*/
public function someOperation()
{
$this->_strategy->doSomething();
}
}

// 使用策略1
$substanceOne = new Substance(new StrategyExampleOne);
$substanceOne->someOperation();

// 使用策略2
$substanceTwo = new Substance(new StrategyExampleTwo);
$substanceTwo->someOperation();