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('小猪','要好好努力啊!');



展开阅读全文

没有更多推荐了,返回首页