桥接模式的作用是将两样东西连接起来,比如桥梁把河的两岸连接起来
桥接模式把“类的功能层次结构”和“类的实现层次结构”连接起来
类的层次结构
- 类的功能层次:父类通过定义抽象方法来定义接口API
- 类的实现层次:子类通过实现具体方法来实现接口API
示例程序
相关类一览表
类的层次 |
类名 |
描述 |
功能层 |
Express |
快递寄件 |
功能层 |
EnhanceExpress |
(寄件)增加代收功能 |
实现层 |
ICompany |
快递公司 |
实现层 |
SunFengImpl |
顺丰快递 |
|
BridgeTest |
测试类 |
示例程序类图
public class Express {
private ICompany iCompany;
public Express(ICompany iCompany) {
this.iCompany = iCompany;
}
public void send() {
iCompany.send();
}
}
public class EnhanceExpress extends Express {
public EnhanceExpress(ICompany iCompany) {
super(iCompany);
}
public void recive() {
System.out.println("快递人员已收件,准备发件中。。。");
send();
}
}
public interface ICompany {
void send();
}
public class SunFengImpl implements ICompany{
@Override
public void send() {
System.out.println("顺丰物流,快件已发出。。。");
}
}
public class BridgeTest {
public static void main(String[] args) {
Express express = new Express(new SunFengImpl());
EnhanceExpress enhance= new EnhanceExpress(new SunFengImpl());
express.send();
enhance.send();
}
}
执行结果:
顺丰物流,快件已发出。。。
快递人员已收件,准备发件中。。。
顺丰物流,快件已发出。。。
Bridge模式使用场景
定义功能最上层角色Abstraction,它使用了Implementor角色的方法定义了基本功能,并保存了Implementor的实例,示例:Express
- RefinedAbstraction(增强抽象化)
在原来Abstraction的基础上增加新功能,示例:EnhanceExpress
该角色处在“实现层”最上层,定义了具体的行为规则,示例:ICompany
- ConcreteImplementor(具体的实现者)
它实现了Implementor定义的方法,示例:SunFengImpl
日常使用
桥接模式在我们web开发中也是使用最频繁的模式之一,在Controller层我们会定义各种业务处理,比如登录操作,定义UserService接口的 login() 的抽象方法,子类UserServiceImpl实现UserService的login()方法处理具体的登录操作,在Controller类中只需保存UserService对象实例。此时UserService即可认为是“桥梁”作用,连接了Controller的抽象定于与UserServiceImpl的具体实现;对UserService新增、修改的实现都不影响Controller类,以做到解耦