本文例子来自鹿鼎记的韦小宝
他是一个八面玲珑的人,是一个有策略的人,所以才能在自己不同的角色转换自如,符合这个设计模式

对应于策略设计模式
Context(使用者): 韦小宝
Abstract(抽象策略) : 转换角色
Strategy(具体策略) : 遇到了康熙,遇到了天地会,遇到了神龙教,分别是什么角色


代码实现

抽象策略

/**
 * 身份抽象类
 * Interface IDEGREE
 */

interface IDegree
{
    public function role();
}

使用者类

/**
 * 使用角色
 * Class Weixiaobao
 */

class Wxb
{
    public function role(IDegree $degree){
        $degree->role();
    }
}

具体策略类

/**
 * 遇到康熙的身份
 * Class Kangxi
 */
include "IDegree.php";

class Kangxi implements IDegree
{

    public function role()
    {
        echo '遇到了康熙,变成小桂子';
    }
}
/**
 * 遇到了天地会
 * Class Tiandihui
 */

include "IDegree.php";

class Tiandihui implements IDegree
{

    public function role()
    {
        echo '遇到了天地会, 我是韦香主';
    }
}
/**
 * 遇见了神龙教
 * Class Shenlongjiao
 */

include "IDegree.php";

class Shenlongjiao implements IDegree
{
    public function role()
    {
        echo '遇到了神龙教, 我是白龙使';
    }

}

测试

/**
 * 行走江湖都不怕的韦小宝
 */

include_once "Wxb.php";
//include_once "Shenlongjiao.php";
include_once "Tiandihui.php";

$wxb = new Wxb();

//皇上派人去攻打神龙教
//$wxb->role(new Shenlongjiao());

$wxb->role(new Tiandihui());

yaoran
17 声望1 粉丝

喜欢代码,热爱生活,喜欢运动,平常爱看各种书籍,