【PHP设计模式 11_QiaoJie.php】桥接模式(针对 二维模型)
<?php /** * 【桥接模式(针对 二维模型)】 * 对于多维度需要处理的事情,多耦合 * 第一维度,发送信息的类型:站内信、email、手机短信 * 第二维度,发送信息的紧急程度:普通、加急、特级 * (说明)桥接模式只需要 A+B种类,但是常规的需要 A*B种类; * 维度越多,各维度下的分类越多,桥接模式越有优势! * */ header("Content-type: text/html; charset=utf-8"); /** * 抽象的信息类 */ abstract class Msg{ protected $send = null; //发送器 public function __construct($send){ $this->send = $send; } abstract public function msg($content); //信的紧急程度 public function send($to,$content){ //对 $content 进行加工 $content = $this->msg($content); //执行发送 $this->send->send($to,$content); } } /** * 按照 信息类型 划分三个类 */ class Web{ //站内信 public function send($to,$content){ echo "[站内信]发给 $to [内容] $content"; } } class Email{ //Email信 public function send($to,$content){ echo "[Email]发给 $to [内容] $content"; } } class Sms{ //手机短信 public function send($to,$content){ echo "[手机短信]发给 $to [内容] $content"; } } /** * 按照 紧急程度 划分三个类 */ class PtMsg extends Msg{ //普通 public function msg($content){ return $content.'【信件类型是 普通信】'; } } class JjMsg extends Msg{ //加急 public function msg($content){ return $content.'【信件类型是 加急信】'; } } class TjMsg extends Msg{ //特急 public function msg($content){ return $content.'【信件类型是 特急信】'; } } /*---------- 客户端开始任意随机配对调用 ---------*/ //发送【普通】的【站内信】 $pt_web_msg = new PtMsg(new Web()); $pt_web_msg->send('小明','吃饭了'); echo '<hr>'; //发送【特急】的【站内信】 $tj_web_msg = new TjMsg(new Web()); $tj_web_msg->send('张三','去跑步了'); echo '<hr>'; //发送【加急】的【Email】 $jj_email_msg = new JjMsg(new Email()); $jj_email_msg->send('李四','在看书'); echo '<hr>'; //发送【普通】的【手机短信】 $pt_sms_msg = new PtMsg(new Sms()); $pt_sms_msg->send('武松','打老虎'); echo '<hr>'; /************** [ 如下为传统方式,比较麻烦 ] **************/ /** * 需求:给用户发信息 * 第一维度,发送信息的类型:站内信、email、手机短信 * 第二维度,发送信息的紧急程度:普通、加急、特级 * 按照常规思路如下:需要 3*3=9 个类!! */ interface MsgTmp{ public function send($to,$content); } //站内 普通信 class WebPT implements MsgTmp{ public function send($to,$content){ echo "[站内信]发给 $to [内容] $content "; } } //Email 普通信 class EmailPT implements MsgTmp{ //... public function send($to,$content){} } //手机短信 普通信 class SmsPT implements MsgTmp{ //... public function send($to,$content){} } //站内 加急信 class WebJJ implements MsgTmp{} //Email 加急信 class EmailJJ implements MsgTmp{} //手机短信 加急信 class SmsJJ implements MsgTmp{} //站内 特急信 class WebTJ implements MsgTmp{} //Email 特急信 class EmailTJ implements MsgTmp{} //手机短信 特急信 class SmsTJ implements MsgTmp{}