写点什么

设计模式之美——多用组合少用继承?

作者:GalaxyCreater
  • 2022-11-20
    广东
  • 本文字数:675 字

    阅读完需:约 2 分钟

什么时候用组合替代继承?


  • 使用组合(大部份时间)

  • 系统越不稳定,继承层次很深,继承关系复杂,我们就尽量使用组合来替代继承。

  • 如果单纯为了代码复用的目的,让两个不具有继承关系的类来继承同一个父类,不合理,此时需要组合来替代。


  • 使用继承

  • 如果类之间的继承结构稳定(不会轻易改变),继承层次比较浅(比如,最多有两层继承关系),继承关系不复杂,我们就可以大胆地使用继承。

  • 调用方法时,如果你不能改变一个函数的入参类型(比如他是个外部类),而入参又非接口,为了支持多态,只能采用继承来实现。


public class FeignClient { // Feign Client框架代码 //...省略其他代码... public abstract void encode(String url)}
public void demofunction(FeignClient feignClient) { //... feignClient.encode(url); //...}
/*demofunction为外部函数,你修改不了它,此时你只能继承FeignClient*/public class CustomizedFeignClient extends FeignClient { @Override public void encode(String url) { //...重写encode的实现...}}
// 调用FeignClient client = new CustomizedFeignClient();demofunction(client);
复制代码


用组合替代继承方式

继承主要有三个作用:表示 is-a 关系,支持多态特性,代码复用。而这三个作用都可以通过其他技术手段来达成。比如 is-a 关系,我们可以通过组合和接口的 has-a 关系来替代;多态特性我们可以利用接口来实现;代码复用我们可以通过组合和委托来实现。所以,从理论上讲,通过组合、接口、委托三个技术手段,我们完全可以替换掉继承,在项目中不用或者少用继承关系,特别是一些复杂的继承关系。


发布于: 刚刚阅读数: 3
用户头像

GalaxyCreater

关注

还未添加个人签名 2019-04-21 加入

还未添加个人简介

评论

发布
暂无评论
设计模式之美——多用组合少用继承?_设计模式_GalaxyCreater_InfoQ写作社区