【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{}
原文地址:https://www.cnblogs.com/rxbook/p/6003001.html