要依赖于抽象,不要依赖于具体
在面向对象设计原则中,要求"要依赖于抽象,不要依赖于具体", 这句话有很多人搞不懂。在这里谈谈我自己的理解。首先看看以下代码
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中的代码完全闭合。
要依赖于抽象,不要依赖于具体相关推荐
- Java依赖于抽象不依赖于具体,依赖倒置原则(Dependecy-Inversion Principle)
依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象. 抽象:即 ...
- 框架依赖注入和普通依赖注入_依赖注入快速入门:它是什么,以及何时使用它...
框架依赖注入和普通依赖注入 by Bhavya Karia 通过Bhavya Karia 介绍 (Introduction) In software engineering, dependency i ...
- 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程【转】...
那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰.也许时至今日,你仍对它们一知半解.不过就在今天, ...
- 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程...
那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰--依赖倒置•控制反转•依赖注入•面向接口编程.也 ...
- 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
今天,我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些"高深术语"中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. 高聚合·低耦合 简短:管理好自己(内聚),但是有 ...
- 【转】那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
作者:在好 链接:https://www.zhihu.com/question/31021366/answer/102239756 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- 专业术语之------耦合?依赖?耦合和依赖的关系?耦合就是依赖
1,依赖? ---什么叫依赖,这就叫依赖,我不能离开你,我要调用你,没有你我实现不了功能,这就是依赖. ---单项依赖:注意在MVC中Controller是依赖Model的,而Model不依赖Cont ...
- Angular 4 依赖注入教程之一 依赖注入简介
目录 Angular 4 依赖注入教程之一 依赖注入简介 Angular 4 依赖注入教程之二 组件服务注入 Angular 4 依赖注入教程之三 ClassProvider的使用 Angular 4 ...
- 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )
文章目录 总结 一.Android 视图依赖注入步骤 二.Android 布局依赖注入示例 1.创建依赖注入库 2.声明注解 3.Activity 基类 4.依赖注入工具类 5.客户端 Activit ...
最新文章
- 关于nginx rewrtie的四种flag
- 斐波拉契数列python123_python计算机二级题目分类汇总
- android中matrix的单位,Android中canvas和matrix之间的关系是什么?
- mysql 索引的统计
- python绘制星空_用python画星空源代码是什么?
- 【人脸识别】VGGFace2数据集介绍
- 神奇的canvas——巧用 canvas 为图片添加水印
- Hive SQL之表与建表
- 从头开始制作51智能车——循迹+遥控+避障(二)——电机驱动模块
- Word自带编辑器设置类Times New Roman字体
- 给红米Note 4X编译LineageOS 14.1刷机包过程【详细】
- 西电计算机学院毕设答辩,关于2020年(2016级)第二批本科生毕业设计(论文)盲审及答辩工作安排的通知...
- 解决Unity旋转改变局部坐标问题
- 维修打包机公司介绍常见打包机故障与维修方法
- java连连看代码_java实现连连看游戏
- 为什么计算机模拟试题无法评分,科目一电脑模拟打分答题
- nginx 代理127.0.0.1的端口
- 寻求公正是一种心理病
- 卡巴斯基关于360胡乱解读“超级工厂”的声明
- Windows并发异步编程(1)JAVA多线程