程序开发中,我们面对不同的信息(M种信息,用不通的工具(N种工具)发送,按照单一职责原则,我们可能需要使用M*N种类来完成此项功能,这样会使程序显得非常臃肿,所以,需要用一种方式来完成此项工作-----桥接模式
原理:把发送工具(发送器),当做一个父类的一个属性来调用发送工具中的方法,来进行消息发送。
//方法一
abstract class info
{
protected $send = null;
public function __construct($send)
{
$this->send = $send;
}
abstract public function msg($content);
public function send($to, $content)
{
$content = $this->msg($content);
$this->send->send($to, $content);
}
}
//信息的发送方式(发送器-发送工具)
class zn
{
public function send($to, $content)
{
echo '【站内给:'.$to, '】【内容是:'.$content.'】';
}
}
class email
{
public function send($to, $content)
{
echo '【Emal给:'.$to, '】【内容是:'.$content.'】';
}
}
class sms
{
public function send($to, $content)
{
echo '【SMS给:'.$to, '】【内容是:'.$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;
}
}
//发送消息;
$sm=new commoninfo(new zn());
echo $sm->send('小明','吃饭了');
//通过接口规范-注入类的实例;
interface info
{
public function msg($to, $content);
}
interface MethodTool
{
public function send($to, $content);
}
//信息的发送方式
class zn implements MethodTool
{
public function send($to, $content)
{
echo '【站内给:' . $to, '】【内容是:' . $content . '】';
}
}
class email implements MethodTool
{
public function send($to, $content)
{
echo '【Emal给:' . $to, '】【内容是:' . $content . '】';
}
}
class sms implements MethodTool
{
public function send($to, $content)
{
echo '【SMS给:' . $to, '】【内容是:' . $content . '】';
}
}
//信息的紧急程度
class commoninfo implements info
{
protected $tool = null;
//这接通过接口注入类的实例
//后期如果添加新的信息注入方式,无需修改内部结构;
public function __construct(MethodTool $tool)
{
$this->tool = $tool;
}
public function msg($to, $content)
{
$info = '普通' . $content;
return $this->tool->send($to, $info);
}
}
class warninfo implements info
{
protected $tool = null;
public function __construct(MethodTool $tool)
{
$this->tool = $tool;
}
public function msg($to, $content)
{
$info = '紧急' . $content;
return $this->tool->send($to, $info);
}
}
class dangerinfo implements info
{
protected $tool = null;
public function __construct(MethodTool $tool)
{
$this->tool = $tool;
}
public function msg($to, $content)
{
$info = '特急' . $content;
return $this->tool->send($to, $info);
}
}
$sm = new commoninfo(new zn());
echo $sm->msg('小明', '吃饭了');