桥接模式
业务需求
- 不同类型的手机,有不同的品牌
- 传统的方式,每一个类型的手机,有对应的不同的品牌
传统解决方案问题分析
- 扩展性问题,类爆炸,如果再增加手机样式,还要增加各个品牌的手机;如果新增一个品牌,也要在各个样式中添加该品牌
- 违反单一职责原则,增加了代码维护成本
- 解决方案,桥接模式
基本介绍
- 将实现与抽象放在两个不同的类层次中,是两个层次可以独立改变
- 是一种结构型设计模式
- 桥接模式基于类的最小设计原则,通过使用封装、聚合、继承的行为让不同的类承担不同的职责;
- 主要优点是把抽象与实现分离开来,保持了各部分的独立性以及应对他们的功能扩展
类图说明
- Client类:桥接模式调用者
- 抽象类(Abstraction):维护了Implementor,即他的实现类 ConcreteImplementor,二者是聚合关系,Abstraction充当桥接类
- RefinedAbstraction:Abstraction的子类
- Implementor:行为实现类的接口,
- ConcreteImplementorA/B:行为的具体实现类
- 从类图可以看出,这里的抽象类和接口时聚合关系,调用和被调用的关系
代码实现
品牌接口
// 品牌接口
public interface Brand {
void open();
void close();
void call();
}
小米手机
// 小米品牌
public class Xiaomi implements Brand{
@Override
public void open() {
System.out.println("小米手机开机");
}
@Override
public void close() {
System.out.println("小米手机关机");
}
@Override
public void call() {
System.out.println("小米手机打电话");
}
}
Vivo手机
// Vivo品牌
public