PHP设计模式之桥接模式

<?php
/**
 *
 * 桥接模式:
 * 如 论坛给用户发送站内信 手机 sms信息 ,信息的程度分为普通 加急 紧急 三种不同的程度;
 *
 */

#第一种情况 不考虑使用桥接模式的情况下,普通模式,我们会这么写;

/*

interface Msg
{
    function send($name,$content);
}

class ZnMsg implements Msg
{
    function send($name,$content)
    {
        echo $name.'发送了站内信息内容是:'.$content;
    }
}

class SmsMsg implements Msg
{
    function send($name,$content)
    {
        echo $name.'发送了sms信息内容是:'.$content;
    }
}

class PhoneMsg implements Msg
{
    function send($name,$content)
    {
        echo $name.'发送了手机信息内容是:'.$content;
    }
}

#然后因为信息的程度分为普通 加急 紧急 三种不同的程度,所以这样;
class CommonZnMsg extends ZnMsg
{
    public function doSend($name,$content)
    {
        echo '普通'.$this->send($name,$content);
    }

}

class WarnZnMsg extends ZnMsg
{
    public function doSend($name,$content)
    {
        echo '加急'.$this->send($name,$content);
    }

}

class DangerZnMsg extends ZnMsg
{
    public function doSend($name,$content)
    {
        echo '紧急'.$this->send($name,$content);
    }
}

*/

//$methods = get_class_methods('CommonZnMsg');
//$propertities = get_class_vars('CommonZnMsg');
//var_dump($propertities);

//对于以上这种设计模式,明显是不合理的,3*3 相当于有9种情况;如果再多一种情况,那明显就27种情况了;所以下面我们使用
//桥接模式,很明显可以改善这种情况;

#第二种情况,使用桥接模式;


interface Msg
{
    function send($name,$content);
}

class ZnMsg implements Msg
{
    function send($name,$content)
    {
        echo $name.'发送了站内信息内容是:'.$content;
    }
}

class SmsMsg implements Msg
{
    function send($name,$content)
    {
        echo $name.'发送了sms信息内容是:'.$content;
    }
}

class PhoneMsg implements Msg
{
    function send($name,$content)
    {
        echo $name.'发送了手机信息内容是:'.$content;
    }
}

abstract class Info
{
    protected $send = null;

    public function __construct(Msg $msg)
    {
        $this->send = $msg;
    }

    abstract function msg($content);

    public function sendMsg($name,$content)
    {
        $content = $this->msg($content);
        $this->send->send($name,$content);
    }
}

class CommonInfo extends Info
{
    public function msg($content = '')
    {
        return '普通'.$content;
    }
}

class WarnInfo extends Info
{
    public function msg($content = '')
    {
        return '加急'.$content;
    }
}

class DangerInfo extends Info
{
    public function msg($content = '')
    {
        return '紧急'.$content;
    }
}

$zn = new DangerInfo(new ZnMsg());
$zn->sendMsg('小猪','要好好努力啊!');

$zn = new CommonInfo(new ZnMsg());
$zn->sendMsg('小猪','要好好努力啊!');



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值