9. 桥梁设计模式

一.场景

  • 一个富翁手下有两个公司 , 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();  // 生产房子的山寨公司
}

二. 桥梁模式定义

定义 : 将抽象和实现解耦 , 使两者可以独立的变化

  1. Abstraction : 抽象化角色 - 定义出该角色(Corp)的行为 , 同时持有对实现化角色的引用 (Product)
  2. Implementer : 实现化角色 - 定义该角色的行为和属性 (Product)
  3. RefinedAbstraction : 修正抽象化角色 - 引用实现化角色或其子类 , 作为对抽象化角色的修正 (HouseCorp,ShanzhaiCorp)
  4. ConcreteImplementor : 具体实现化角色 (House,Ipod)

三 . 使用场景

桥梁模式为了弥补继承的不足而产生 :

  1. 当继承层次过度无法更加细粒度设计场景需要使用桥梁模式 , 而不是继承
  2. 接口不稳定却想要通过继承,实现来实现业务需求得不偿失, 把不稳定的接口作为Implementer抽象出来(eg : ShanzhaiCorp的产品不固定 , 吧产品抽象出Product)
原文地址:https://www.cnblogs.com/72808ljup/p/5169372.html