/**
* 策略模式的好處就是:體現了高內聚低耦合的特性
*/
/**
* 首先定一個策略接口,這是諸葛亮老人家給趙雲的三個錦囊妙計的接口
*/
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();
運行結果如下:
-----------剛剛到吳國的時候拆第一個-------------
找喬國老幫忙,讓吳國太給孫權施加壓力
-----------劉備樂不思蜀了,拆第二個了-------------
求吳國太開個綠燈,放行!
-----------孫權的小兵追了,咋辦?拆第三個-------------
孫夫人斷後,擋住追兵