第 1 章 策略模式

header("Content-type: text/html; charset=UTF-8");
/**
* 策略模式的好處就是:體現了高內聚低耦合的特性
*/

/**
* 首先定一個策略接口,這是諸葛亮老人家給趙雲的三個錦囊妙計的接口
*/
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();


運行結果如下:

-----------剛剛到吳國的時候拆第一個-------------
找喬國老幫忙,讓吳國太給孫權施加壓力




-----------劉備樂不思蜀了,拆第二個了-------------
求吳國太開個綠燈,放行!




-----------孫權的小兵追了,咋辦?拆第三個-------------
孫夫人斷後,擋住追兵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章