当前位置: 首页 > news >正文

组合关系比依赖关系耦合性更强

首先说明,在这里我把“关联”、“组合”、“聚合”关系都统一当做“组合”关系来说的,但实际上聚合(has-a)是关联的一种,组合(cntains-a)也是关联的一种。如果想要知道三者之间的区别,详见这篇博客:

依赖、关联、聚合和组合之间区别_玛丽莲茼蒿的博客-CSDN博客关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。https://blog.csdn.net/qq_44886213/article/details/127332726?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127332726%22%2C%22source%22%3A%22qq_44886213%22%7D

组合关系直接把类B的实例作为自己的成员变量,意思是我拥有了它,它必须作为我必不可而少的部件。

依赖关系只是在自己的成员方法中用到了类B,意思是我使用了它,但我不一定拥有它。

还是拿【司机】和【车】来举例。

如果采用组合关系,意思是,“我有一辆车,这辆车是我的了,我开我自己的车”

class Car{
    public void run(){
        System.out.println("在跑了在跑了");
    }
}

class Driver{
    Car myCar; //这辆车是我的
    public void drive(){
        myCar.run();
    }
}

如果采用依赖关系,意思是“我开走了一辆车,但这辆车不一定是我的”

class Car{
    public void run(){
        System.out.println("在跑了在跑了");
    }
}

class Driver{
    public void drive(Car car){ //这辆车不一定是我的,反正我开跑了
        car.run();
    }
}

在实际开发中如何选择用依赖关系还是组合关系呢? 

根据耦合性有强到弱的关系:继承∣实现→组合→聚合→关联→依赖

因为组合关系比依赖关系的耦合性更强,这也就要求我们能用依赖关系就不要用组合关系,

但有的时候类B必须作为类A的一个部件(类A必须拥有类B),就得用组合关系了(见策略模式中Duck和Character的例子)。 

举一个更贴切的例子,Person类和Arm类就必须是组合关系,因为一个人必须有自己的胳膊,不能说我用胳膊实现抬手这个动作的时候就通过形参随便拿别人的胳膊用一用。

相关文章:

  • 用自己的电脑建设网站/百度seo优化策略
  • 如何搭建网站赚点击/长春百度seo排名
  • 成都医院手机网站建设/培训方案怎么做
  • 有没有专门做印刷图的网站/全网搜索引擎
  • 新疆建设兵团第四师中学网站/小程序推广赚佣金平台
  • wordpress博客主题汉化/个人网站制作流程
  • 【PyTorch深度学习项目实战100例】—— 基于RNN实现微博热点新闻分类 | 第27例
  • Java秒杀系统设计
  • (附源码)计算机毕业设计SSM基于Java的图书馆座位预约系统
  • 投资超百亿,这一重大水利项目让长江中下游地区防洪更安全了
  • 【Shell牛客刷题系列】SHELL13 去掉所有包含this的句子:awk与gawk命令的进阶使用
  • 多测师肖sir_高级讲师_第2个月第27讲解jmeter性能硬件指标
  • [Codeforces] combinatorics (R1600) Part.5
  • Python语法(1)- 基础语法,判断语句,循环语句,函数
  • 互联网摸鱼日报(2022-10-15)
  • 2022年了,我才开始学 typescript ,晚吗?(7.5k字总结)
  • 算法 - 查找众数及中位数
  • Hook--2.useRef、useCallback、useContext、useReducer