Java定义接口变量为接收类型有什么好处(面向接口编程)
个人理解:定义接口变量为接收类型属于面向接口的编程,通过接口的抽象能减少类之间的耦合,增加可复用性。
面向接口编程:
一种规范约束
- 制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者)。
- 接口本质上就是由制定者来协调实现者和调用者之间的关系。
- 只有实现者和调用者都遵循“面向接口编程”这个准则,制定者的协调目的才能达到。
- 接口的语义是can-do语义,表约束(Constraint)。
- 像JDBC的规范API,不管你使用哪一套实现,我们使用的时候都是使用相同的API.
分离设计与实现
- 使得系统可以支持开闭原则和依赖倒转原则。设计师可以设计出接口,而程序员可以依照接口去写实现。
解耦合
- 在一定程度上解耦合,依赖接口还不依赖具体实现,在替换实现类的时候,可以将影响减到最小。
方便做单元测试
- 在依赖接口的情况下,单元测试更容易,使用mock也更容易,在TDD中,测试驱动就是要让程序易于测试。
与设计有关
- 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。
- 在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;
- 而各个对象之间的协作关系则成为系统设计的关键。
- 在OSGI规范中,接口与实现的分离是用得最淋漓尽致的。
Spring的IoC
- Spring将类的创建过程隐藏起来,实际上就是一个大的工厂,使得我们的代码更简洁,更易于管理和测试。
参考:
http://ask.csdn.net/questions/217447
http://blog.csdn.net/u010382560/article/details/48051355
http://www.cnblogs.com/chaohi/archive/2008/10/23/2330442.html
http://blog.csdn.net/u013400743/article/details/51252003
http://www.cnblogs.com/xyqCreator/archive/2012/11/06/2756687.html
http://blog.csdn.net/greenlihui/article/details/61916129
https://www.cnblogs.com/feng9exe/p/5588671.html
http://blog.csdn.net/jj_nan/article/details/70161086
http://blog.jobbole.com/44559/
http://blog.csdn.net/fireofjava/article/details/17527463
Java定义接口变量为接收类型有什么好处(面向接口编程)的更多相关文章
- 016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值
016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值 本文知识点:字面值 关于字面值的概念,需要注意:很多地方,我们可能就把字面值 ...
- JAVA定义接口格式:
[public]interface 接口名称 [extends父接口名列表] { //静态常量 [public] [static] [final] 数据类型变量名=常量值; //抽象方法 [publi ...
- IT兄弟连 JavaWeb教程 Servlet中定义的变量的作用域类型
在Java语言中,局部变量和实力变量有着不同的作用于,它们的区别如下: 局部变量在一个方法中定义,每当一个线程执行局部变量所在的方法时,在线程的堆栈中就会创建这个局部变量,当线程执行完该方法,局部变量 ...
- Java判断Class变量是什么类型
public static void main(String[] args) { java.util.Date date_u = new java.util.Date(1); java.sql.Dat ...
- java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)
抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...
- java接口中定义成员变量
//抽象类中可以定义如下成员变量:public abstract class People { public String name; public int age; public abstract ...
- java中接口的定义和接口的实现
1.接口的定义 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interfa ...
- java中接口的定义与实现
1.定义接口 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...
- java定义和实现接口
1.定义接口 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体.当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...
随机推荐
- poj 2385 树上掉苹果问题 dp算法
题意:有树1 树2 会掉苹果,奶牛去捡,只能移动w次,开始的时候在树1 问最多可以捡多少个苹果? 思路: dp[i][j]表示i分钟移动j次捡到苹果的最大值 实例分析 0,1 1,2...说明 偶数 ...
- javascript常见数据集
目录 数组 对象 一.数组 创建方法 1 2 3 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([ ...
- jquery拼接字符串
1. $("#div").append("<table><tr align='center'>" +"<td >& ...
- PHP define() 定义常量
PHP define()函数定义了运行时的常量, 具体语法如下所示: (PHP 4, PHP 5, PHP 7) define — Defines a named constant bool defi ...
- JAVA-两种后台页面跳转方式
1.请求转发 RequestDispatcher rd = request.getRequestDispatcher("url"); rd.forward(request, res ...
- [python工具][3]sublime常用配置 与操作指南
https://github.com/jikeytang/sublime-text http://zh.lucida.me/blog/sublime-text-complete-guide/
- mysqld got signal 11
问题发生背景 问题实例之前使用的是percona server,是安装pmm镜像自带的数据库,之后通过mysqldump迁移到了MySQL server,目前是只有有pmm server 访问pmm库 ...
- 正则表达式与python中re模块
一个网站,正则表达式入门的,很好 http://www.jb51.net/tools/zhengze.html 下面这个包含对python中re的介绍,也是很不错的http://www.w3cscho ...
- 设计模式(一)单例模式:1-饿汉模式(Eager)
思想: 饿汉模式是最常提及的2种单例模式之一,其核心思想,是类持有一个自身的 instance 属性,并且在申明的同时立即初始化. 同时,类将自身的构造器权限设为 private,防止外部代码创建对象 ...
- 第002弹:Java 中的值传递和引用传递
在 Java 的代码开发过程中,为了尽可能提高方法的复用性,明确方法的作用,同时防止一个方法内部过于臃肿的问题,往往会创建许多方法,那么不可避免地会涉及到参数传递的问题.通常来说,我们将 Java 中 ...