本文例子来自鹿鼎记的韦小宝
他是一个八面玲珑的人,是一个有策略的人,所以才能在自己不同的角色转换自如,符合这个设计模式
对应于策略设计模式
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());
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。