跳到主要内容

复用机制与委托

类继承与接口继承有什么区别?​

  • 类继承: 子类复用父类的接口与实现;
  • 接口继承: 只复用方法签名, 实现逻辑由实现类自己给出;

白箱复用与黑箱复用有什么区别?​

  • 白箱复用: 通过类继承复用, 父类实现对子类可见, 子类可改写父类行为;
  • 黑箱复用: 通过组合复用, 被组合对象成为当前对象的一个属性, 内部细节不可见;
  • 差别: 白箱复用依赖父类实现细节, 耦合更紧; 黑箱复用只依赖被组合对象的接口;

委托如何实现复用?​

  • 委托: 一种组合方法, 使组合具备与继承相同的复用能力;
  • 做法: 额外创建一个对象充当被复用逻辑的代理者, 组合对象把请求转发给它;
  • 边界: 组合对象只调用代理者的接口, 不依赖代理者内部实现;

三种复用方式如何对比?​

维度类继承接口实现委托
复用内容接口 + 实现仅接口接口 + 实现
可见性父类实现可见无实现可复用实现被封装
复用粒度类型维度类型维度按行为自由组合
组合能力单一父类可多接口可委托多个对象
  • 结论: 需要复用实现又不愿暴露实现细节时, 用接口声明能力、用委托提供实现;