桥接模式
点奶茶的时候, 我们一般选择原味奶茶/牛奶奶茶/咸味奶茶
现在假设我们也有这些已经实现好的奶茶类, 且这个奶茶类仅仅就是一个类, 什么也没有, 不可改动
类似
class 奶茶{
}
class 原味奶茶 extends 奶茶{
}
但是奶茶也分大杯奶茶, 中杯奶茶, 小杯奶茶, 如果我们要实现这种不同型号的奶茶, 可以设计出原味大杯奶茶, 原味中杯奶茶, 原味小杯奶茶, 牛奶大杯奶茶, 牛奶中杯奶茶…等等足足9个类, 那万一我们奶茶还能加冰加热半糖少糖, 岂不是越来越多类
这时候桥接模式就可以出场了
桥接模式的固定角色有四个:
抽象化(Abstraction)角色 :定义抽象类,并包含一个对实现化对象的引用。
扩展抽象化(Refined Abstraction)角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
实现化(Implementor)角色 :定义实现化角色的接口,供扩展抽象化角色调用。
具体实现化(Concrete Implementor)角色 :给出实现化角色接口的具体实现。
如何应用到本例子?
首先抽象化角色:
class 奶茶{
protected 型号 x;
public 奶茶(型号 x){
this.x = x;
}
}
扩展抽象化角色:
class 原味奶茶 extends 奶茶{
public 原味奶茶(型号 x){
super(x);
}
}
实例化角色:
class 型号{
}
具体实例化角色:
class 大杯 extends 型号{
}
class 中杯 extends 型号{
}
class 小杯 extends 型号{
}
看到这里, 不知道大家有没有想到一个东西 : 组合
是的, 桥接模式的核心其实就是一个组合的概念