php中介卖号,PHP 中介者模式 - 304158的个人空间 - OSCHINA - 中文开源技术交流社区...

/**

* 中介者模式

* A与B之间通讯经过中间者传递

* 中介者储存并转发内容

* 中介者把自身绑定到A-B共同的父类保存

* 创建AB类 注册到中介类,中介类返回自身给AB类,

* AB类-中介类互相绑定

*/

/**

* Class AUser

* 创建用户抽象类

* @param $_mid (用于绑定中介类)

* @abstract

* @function SendMessage($id,$massage); (用于对指定的用户发送信息)

* @function GetMessage($massage);(用于获取其他用户发送的信息)

* @public

* @function SetMid(AMidService $mid)

* (接收一个中间类,并绑定到$_mid的实现)

*

*/

abstract class AUser

{

protected $_mid;

abstract function SendMessage($id,$massage);

abstract function GetMessage($massage);

public function SetMid(AMidService $mid)

{

$this->_mid = $mid;

}

}

/**

* Class UserA

* @function SendMessage($id, $massage) 发送信息

* @function GetMessage($massage) 获取消息

*/

class UserA extends AUser

{

/**

* @param $id 接收方id

* @param $massage 发送消息文本

*/

function SendMessage($id, $massage)

{

// TODO: Implement SendMessage() method.

$this->_mid->Transfer($id,$massage);

}

/**

* @param $massage 接收的信息

*/

function GetMessage($massage)

{

// TODO: Implement GetMessage() method.

echo '新的消息'.$massage.PHP_EOL;

}

}

/**

* Class UserB

* @function SendMessage($id, $massage) 发送信息

* @function GetMessage($massage) 获取消息

*/

class UserB extends AUser

{

/**

* @param $id 接收方id

* @param $massage 发送消息文本

*/

function SendMessage($id, $massage)

{

// TODO: Implement SendMessage() method.

$this->_mid->Transfer($id,$massage);

}

/**

* @param $massage 接收的信息

*/

function GetMessage($massage)

{

// TODO: Implement GetMessage() method.

echo '新的消息'.$massage.PHP_EOL;

}

}

/**

* Class AMidService

* 定义中介类

* @abstract

* function Transfer($id,$message)

* 提供用户调用 发送信息抽象方法

* function Register($id,AUser $user)

* 绑定用户,用户绑定中介调用中介方法实现接收信息

*/

abstract class AMidService

{

abstract public function Transfer($id,$message);

abstract public function Register($id,AUser $user);

}

/**

* Class MidService

* 中介类具体实现

* @protected static $_mid_service 存放用户绑定信息[用户id]=用户实例

*/

class MidService extends AMidService

{

protected static $_mid_service;

/**

* MidService constructor.

* 如果未设置 转换成数组

*/

public function __construct()

{

isset(self::$_mid_service)?'':self::$_mid_service=[];

}

// 转发

/**

* @param $id 接收信息用户id

* @param $message 发送给指定用户的信息

*/

public function Transfer($id, $message)

{

// 判断是否有此用户

if (!isset(self::$_mid_service[$id]))

{

echo '发送失败未找到用户'.PHP_EOL;

return;

}

// TODO: Implement Transfer() method.

// 用户存在,调用对应用户实例中的GetMessage 发送信息

self::$_mid_service[$id]->GetMessage($message.'接收方'.$id);

}

// 储存/注册用户

/**

* @param $id 用户绑定id

* @param AUser $user 用户实例

*/

public function Register($id, AUser $user)

{

// TODO: Implement Register() method.

if (!isset(self::$_mid_service[$id]))

{

self::$_mid_service[$id] = $user;

}

$user->SetMid($this); // 调用用户实例绑定 中介类(这样才能让用户类调用中介类的接口)

}

}

// 创建用户

$user_a = new UserA();

$user_b = new UserB();

// 创建中介

$mid = new MidService();

// 中介中注册用户

$mid->Register('userA',$user_a);

$mid->Register('userB',$user_b);

// 向A 用户发送信息

$user_b->SendMessage('userA','hello userA'); // 输出 新的消息hello userA接收方userA

// 向B 用户发送信息

$user_a->SendMessage('userB','hello userB'); // 新的消息hello userB接收方userB

// 向不存在的C 用户发送信息

$user_b->SendMessage('userC','给不存在的C发送信息'); // 发送失败未找到用户

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值