<?php
class Email{
public function send($to,$content){
return '发送电子邮件给'.$to.',内容是:'.$content;
}
}
class SMS{
public function send($to,$content){
return '发送邮件给'.$to.',内容是:'.$content;
}
}
class Message{
public function send($to,$content){
return '发送短信给'.$to.',内容是:'.$content;
}
}
class Common{
public function speed($content){
return '正常类型:'.$content;
}
}
class Warning{
public function speed($content){
return '警告类型:'.$content;
}
}
class Danger{
public function speed($content){
return '危险类型:'.$content;
}
}
$content = new Email();
$common = new Common();
echo $common->speed($content->send('李四','衣服发货'));
$content = new Email();
$warning = new Warning();
echo $warning->speed($content->send('王五','丢包了'));
自由组合,想用哪一个就调用哪一个。 客户端调用,我们的抽象类使用不用的实现类就可以让操作方法变成多态的感觉。
- 在源码解释中,我们会发现,这个模式和适配器模式非常相似。但是,适配器的目的是为了帮助两个不太相关的类,让它们能够协同工作,实现中间转换工作。而桥接则是为了让方法的行为解除继承耦合,方便地添加、修改,动态调用行为,让抽象接口和实现部分可以独立进行改变
- 让抽象接口和实现部分可以独立进行改变的意思是,只要维护了实现接口的引用,我们的实现接口的具体实现类可以是完全不同的类,里面有不同的功能,并且可以任意改变。让实现来自己决定它自己是什么。
- 桥接模式的优点:分享接口及其实现部分、提高可扩充性、实现细节对客户透明
- 桥接模式最主要解决的问题就是继承的不断增长而带来的紧耦合问题
- 组合与聚合:聚合是弱关系,A可以包含B,但B不是A的一部分;组合是强关系,A包含B,B也是A的一部分,整体和部分的关系