第 1 章 策略模式

来源:互联网 发布:java jdk 1.7.0 64位 编辑:程序博客网 时间:2024/06/02 05:08
<?php
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();


运行结果如下:

-----------刚刚到吴国的时候拆第一个-------------
找乔国老帮忙,让吴国太给孙权施加压力




-----------刘备乐不思蜀了,拆第二个了-------------
求吴国太开个绿灯,放行!




-----------孙权的小兵追了,咋办?拆第三个-------------
孙夫人断后,挡住追兵

0 0