/**
* 策略模式的好处就是:体现了高内聚低耦合的特性
*/
/**
* 首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口
*/
interface IStrategy{
//每个锦囊妙计都是一个可执行的算法
public function operate();
}
/**
* 找乔国老帮忙,使孙权不能杀刘备
*/
class BackDoor implements IStrategy {
public function operate(){
echo "找乔国老帮忙,让吴国太给孙权施加压力";
}
}
/**
* 求吴国太开个绿灯
*/
class GivenGreenLight implements IStrategy{
public function operate(){
echo "求吴国太开个绿灯,放行!";
}
}
/**
* 孙夫人断后,挡住追兵
*/
class BlockEnemy implements IStrategy {
public function operate(){
echo "孙夫人断后,挡住追兵";
}
}
/**
* 计谋有了,那还要有锦囊
*/
class Context {
private $straegy = NULL;
//构造函数,你要使用那个妙计
public function __construct(IStrategy $strategy){
$this->straegy = $strategy;
}
//使用计谋了,看我出招了
public function operate(){
$this->straegy->operate();
}
}
/**
* 然后就是赵云雄赳赳的揣着三个锦囊,拉着已步入老年行列的、还想着娶纯情少女的、色迷迷的刘老爷子去入赘了,嗨,还别说,小亮的三个妙计还真是不错,瞅瞅:
*/
class ZhaoYun{
/**
* 赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计
*/
public function __construct(){
$context = null;
//刚刚到吴国的时候拆第一个
echo ("-----------刚刚到吴国的时候拆第一个-------------<br>");
$context = new Context(new BackDoor()); //拿到妙计
$context->operate(); //拆开执行
echo "<br><br><br><br><br>";
//刘备乐不思蜀了,拆第二个了
echo ("-----------刘备乐不思蜀了,拆第二个了-------------<br>");
$context = new Context(new GivenGreenLight());
$context->operate(); //执行了第二个锦囊了
echo "<br><br><br><br><br>";
//孙权的小兵追了,咋办?拆第三个
echo ("-----------孙权的小兵追了,咋办?拆第三个-------------<br>");
$context = new Context(new BlockEnemy());
$context->operate(); //孙夫人退兵
echo "<br><br><br><br><br>";
}
}
new ZhaoYun();
运行结果如下:
-----------刚刚到吴国的时候拆第一个-------------
找乔国老帮忙,让吴国太给孙权施加压力
-----------刘备乐不思蜀了,拆第二个了-------------
求吴国太开个绿灯,放行!
-----------孙权的小兵追了,咋办?拆第三个-------------
孙夫人断后,挡住追兵