在面向对象设计原则中,要求"要依赖于抽象,不要依赖于具体", 这句话有很多人搞不懂。在这里谈谈我自己的理解。首先看看以下代码

class A{public void swim(){Dog dog = new Dog();dog.move();}
}

swim方法中定义了一个Dog的对象,那么无论哪个对象调用这个方法时,一定是"狗爬",swim和Dog的对象是紧耦合的关系,我们想换成鸭子是不可能。

假如代码这样换一下,我们定义一个动物的接口,接口定义一个move方法。

interface Animal
{void move();
}

让狗和鸭子实现该接口,代码如下

public class Dog implements Animal
{overridepublic void move(){//狗爬}
}public class Duck implements Animal
{overridepublic void move(){//八字步}
}

class A代码改成如下代码:

class A
{private Animal animal;public A(Animal animal){this.animal = animal; }public void swim(){   animal.move();}
}

class A依赖于接口(抽象)Animal,和狗、鸭子(具体)没有一点关系,当我们注入的对象是狗,则执行狗爬,当我们注入的对象是鸭子,则执行的是八字步。这就是“要依赖于抽象,不要依赖于具体”具体含义。这样的好处是程序很好扩展,如果想使用青蛙游泳时,我只需要创建一个实现Animal接口的青蛙类,将青蛙的对象注入A类中,便可以执行青蛙的蛙泳了,A中的代码完全闭合。

要依赖于抽象,不要依赖于具体相关推荐

  1. Java依赖于抽象不依赖于具体,依赖倒置原则(Dependecy-Inversion Principle)

    依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象. 抽象:即 ...

  2. 框架依赖注入和普通依赖注入_依赖注入快速入门:它是什么,以及何时使用它...

    框架依赖注入和普通依赖注入 by Bhavya Karia 通过Bhavya Karia 介绍 (Introduction) In software engineering, dependency i ...

  3. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程【转】...

    那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰.也许时至今日,你仍对它们一知半解.不过就在今天, ...

  4. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程...

    那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰--依赖倒置•控制反转•依赖注入•面向接口编程.也 ...

  5. 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

    今天,我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些"高深术语"中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. 高聚合·低耦合 简短:管理好自己(内聚),但是有 ...

  6. 【转】那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

    作者:在好 链接:https://www.zhihu.com/question/31021366/answer/102239756 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  7. 专业术语之------耦合?依赖?耦合和依赖的关系?耦合就是依赖

    1,依赖? ---什么叫依赖,这就叫依赖,我不能离开你,我要调用你,没有你我实现不了功能,这就是依赖. ---单项依赖:注意在MVC中Controller是依赖Model的,而Model不依赖Cont ...

  8. Angular 4 依赖注入教程之一 依赖注入简介

    目录 Angular 4 依赖注入教程之一 依赖注入简介 Angular 4 依赖注入教程之二 组件服务注入 Angular 4 依赖注入教程之三 ClassProvider的使用 Angular 4 ...

  9. 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )

    文章目录 总结 一.Android 视图依赖注入步骤 二.Android 布局依赖注入示例 1.创建依赖注入库 2.声明注解 3.Activity 基类 4.依赖注入工具类 5.客户端 Activit ...

最新文章

  1. 关于nginx rewrtie的四种flag
  2. 斐波拉契数列python123_python计算机二级题目分类汇总
  3. android中matrix的单位,Android中canvas和matrix之间的关系是什么?
  4. mysql 索引的统计
  5. python绘制星空_用python画星空源代码是什么?
  6. 【人脸识别】VGGFace2数据集介绍
  7. 神奇的canvas——巧用 canvas 为图片添加水印
  8. Hive SQL之表与建表
  9. 从头开始制作51智能车——循迹+遥控+避障(二)——电机驱动模块
  10. Word自带编辑器设置类Times New Roman字体
  11. 给红米Note 4X编译LineageOS 14.1刷机包过程【详细】
  12. 西电计算机学院毕设答辩,关于2020年(2016级)第二批本科生毕业设计(论文)盲审及答辩工作安排的通知...
  13. 解决Unity旋转改变局部坐标问题
  14. 维修打包机公司介绍常见打包机故障与维修方法
  15. java连连看代码_java实现连连看游戏
  16. 为什么计算机模拟试题无法评分,科目一电脑模拟打分答题
  17. nginx 代理127.0.0.1的端口
  18. 寻求公正是一种心理病
  19. 卡巴斯基关于360胡乱解读“超级工厂”的声明
  20. Windows并发异步编程(1)JAVA多线程

热门文章

  1. 什么?Sigfox还没入华就要收摊了?
  2. 【设计指南】避免PCB板翘,合格的工程师都会这样设计!
  3. Maven基础-认识Maven
  4. 为什么想来我们公司工作?- 面试常见问题解析
  5. el-pagination分页自定义前往第几页样式(下拉框形式)
  6. HDFS遍历子目录 Hadoop fs -ls -R path
  7. 硬盘内部传输速率和外部传输速率的区别
  8. python OOP面向对象笔记
  9. RFLA: Gaussian Receptive Field based Label Assignment for Tiny Object Detection
  10. Arduino 串口数据读写