一.场景
- 一个富翁手下有两个公司 , 1个服装公司生产服装 , 1个山寨公司生产当季热卖品的仿造品 (生产的产品时时变化) , 模拟富翁用这两家公司赚钱的过程
public static void main(String[] args){
ClothesCorp cc = new ClothesCorp(); // 服装公司赚钱
cc.makeMoney();
ShanzhaiCorp sc = new ShanzhaiCorp(); // 山寨公司赚钱
sc.makeMoney();
}
[衍化] : 因为山寨公司生产的产品不固定 , 于是把山寨公司生产的产品抽象出来 , 形成以下类图
public static void main(String[] args){
House house = new House();
Ipod ipod = new Ipod();
new HouseCpro(house).makeMoney();
new ShanzhaiCpro(ipod).makeMoney(); // 生产ipod的山寨公司
new ShanzhaiCpro(house).makeMoney(); // 生产房子的山寨公司
}
二. 桥梁模式定义
定义 : 将抽象和实现解耦 , 使两者可以独立的变化
- Abstraction : 抽象化角色 - 定义出该角色(Corp)的行为 , 同时持有对实现化角色的引用 (Product)
- Implementer : 实现化角色 - 定义该角色的行为和属性 (Product)
- RefinedAbstraction : 修正抽象化角色 - 引用实现化角色或其子类 , 作为对抽象化角色的修正 (HouseCorp,ShanzhaiCorp)
- ConcreteImplementor : 具体实现化角色 (House,Ipod)
三 . 使用场景
桥梁模式为了弥补继承的不足而产生 :
- 当继承层次过度无法更加细粒度设计场景需要使用桥梁模式 , 而不是继承
- 接口不稳定却想要通过继承,实现来实现业务需求得不偿失, 把不稳定的接口作为Implementer抽象出来(eg : ShanzhaiCorp的产品不固定 , 吧产品抽象出Product)