`
My*Love
  • 浏览: 72468 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

重新认识接口,理解何为面向接口编程

    博客分类:
  • JAVA
阅读更多
   开始学习java知道接口是一个类所具有的方法特征的集合,是一种逻辑上的抽象,它里面定义的方法没有方法体,主要作用就是解决了java类只能单根继承的不足。如:我们可以定义一个跑车接口SportsCar:
/**
 * 定义一个跑车接口
 * 
 */
public interface SportsCar {
	//发动机类型:石油驱动
	public void oilEngine();
}
再写一个奔驰汽车类Benz,实现SportsCar接口
/**
 * 奔驰汽车
 * 
 */
public class Benz implements SportsCar {

	public void oilEngine() {
		System.out.println("采用石油驱动");
	}

}


像这样我们也可以把SportsCar定义为一个类,让Benz类去继承它,也可以实现,但如果科技进步了,人类环保意识加强了,出现了绿色环保车型,即采用太阳能作为发动机,而奔驰公司也为了体现这点,给汽车装上了双引擎系统。那么再定义一个GreenCar类,让Benz去继承就不行了,因为java是单根继承,所以只能把GreenCar定义为一个接口:
/**
 * 绿色环保车接口
 *
 */
public interface GreenCar {
	//发动机类型:太阳能驱动
	public void solarEngine();
}
让Benz类同时实现这两上接口,从而使汽车具有双引擎系统的功能:
/**
 * 奔驰汽车
 *
 */
public class Benz implements SportsCar ,GreenCar{
	
	public void oilEngine() {
		System.out.println("采用石油驱动");
	}

	
	public void solarEngine() {
		System.out.println("采用太阳能驱动");
	}

}

通过接口提供了关联以及方法调用上的可插入性,当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉,就像我们将一个60G硬盘换成一个160G的硬盘,计算机其他地方不用做任何改动,而是把原硬盘拔下来、新硬盘插上就行了,因为计算机其他部分不依赖具体硬盘,而只依赖一个IDE接口,只要硬盘实现了这个接口,就可以替换上去。

   虽然接口的好处是毋庸置疑的,可是自己在实际项目开发过程中很少体现面向接口的编程思想,很多时候自己在接口里面定义了一个方法,马上就把想到怎样去实现它,其实自己的注意力一直在实现层,有时候觉得接口这玩意儿有个屁用。其实这是自己的误区,没有真正从一个高度理解接口的内涵,面向接口编程体现的是一种设计,如果一个项目没有好的设计,就算成功了它的扩展性也不好。

   那么面向接口编程到底有什么好处呢?
   1.使用接口编程,易于程序的扩展
   理解面向接口编程一个很好的实例就是java自带的数据库连接接口的定义,假如我们现在要写一个连接数据库的类给用户使用,一般的解决办法是给每个数据库写一个类,然后根据用户使用的数据库类型确定使用具体的类,这样的话必然造成代码的重复,另外也不利于系统的扩展,因为你根本不知道用户使用什么样的数据库,可能是MySQL,可能是Oracle,大家都知道eclipse它可以连接很多数据库,只要你把相应的驱动包加进来,就可以实现连接多种数据库了,想一想这是为什么,因为java里面把Connection定义为了接口,接口是什么,在这里其实就一个标准了,真正的实现其实是交给了数据库的开发方,这个实现类中实现了Connection接口,不信看驱动包中Connection类的源码:
public class Connection extends ConnectionProperties implements
java.sql.Connection {

}那么不管以后还出现什么样的数据库,只要它实现了Sun公司制定的个接口就都可以连接的上,这样让eclipse得到的广泛的应用
   2.降低了程序之间的耦合性
   大家玩过游戏的都知道,很多游戏从它发布开始,就会每隔一段时间进行更新,有时还会增加游戏角色等,使玩家时刻保持新鲜感。那么游戏里面肯定是定义了很多的接口,我增加一个角色只要实现这个角色的接口就可以了,只要通过编译后,就可以把它加到服务器中去就新增了一角色,你想要是没有接口,这游戏还能玩的下去吗?
   3.便于项目的模块化管理,不形成编译的依赖性
   因为现在都讲究团队合作精神,做项目也是一样,很多项目都不可能由你一个人来完成,肯定是很多人分工合作,分模块的来完成工作,每个模块都是独立的,尤其到项目快完成的时候并不要把所有模块组合起来编译一把,然后再运行,只要每个独立模块编译通过就OK了。
   虽然自己已经感觉到了不少面向接口编程的好处,但这还只是自己的心得,离真正把这种思想贯彻到编码设计中感觉还是有不少距离,这是一种设计思想,思想是最难的把握的, 对于原理性的东西还要自己好好去琢磨,有自己真正的见解才是真的懂了。
 
分享到:
评论
1 楼 andey007518 2010-08-24  
一直也在纳闷这个问题的,多实践,多思索,TKS~~

相关推荐

    Java面向对象编程思想

    Java 的核心是面向对象编程.所有的java程序都是面向对象的。 以前总听老师说c语言是...面向对象的编程围绕它的数据(即对象)和为这个数据严格定义的接口来组织程序。面向对象的程序实际上是用数据控制对代码的访问。

    何为编程.zip

    何为编程.zip

    知识笔记:Python面向对象(九)

    首先解释了何为面向对象以及为什么要在程序中引入此类概念,进而详细探讨了类与对象的定义与使用、面向对象的三个重要特性(封装、继承、多态)、构造器和魔法方法等功能的实现。同时给出了具体的实例来帮助理解面向...

    PHP面向对象编程(用星际快速入门)

    在深入探讨PHP面向对象编程之前,我们先来了解一下何为面向对象编程(OOP)。面向对象编程是一种编程范式,它使用“对象”——即数据和与数据相关的操作的封装体——来设计软件。这种编程方式强调数据的封装、继承和多...

    论何为教育.pdf

    论何为教育.pdf

    30张PPT截图揭秘何为工业4.0.pdf

    30张PPT截图揭秘何为工业4.0

    (完整版)什么是DVI接口?DVI接口定义、类型、图片.doc

    DVI接口是何为?DVI接口定义、类型、图片 在计算机领域中,DVI(Digital Visual Interface,数字视觉接口)是一种常用的视频接口标准。DVI接口是由Silicon Image、Intel、Compaq、IBM、HP、NEC、Fujitsu等公司共同...

    何为NAT 何为NAT 何为NAT

    配置NAT时,需要对网络拓扑、地址池、ACL(访问控制列表)等有深入理解,确保NAT配置正确无误,并能够根据需要进行端口转发设置。同时,定期检查NAT转换表和排查NAT相关的故障也是网络管理员的重要职责。 总的来说...

    新浪微博何为舟-自动化策略生成的思考与实践.pdf

    新浪微博何为舟-自动化策略生成的思考与实践.pdf

    真的可以,用C语言实现面向对象编程OOP

    我们经常说C语言是面向过程的,而C++是面向对象的,然而何为面向对象,什么又是面向过程呢?不管怎么样,我们最原始的目标只有一个就是实现我们所需要的功能,从这一点说它们是殊途同归的。过程与对象只是侧重点...

    Java编程思维1

    【Java编程思维1】这本书是面向初学者的编程入门教程,旨在帮助读者理解计算机科学的基础概念,学会如何像计算机科学家一样思考,并掌握编程解决问题的能力。书中以Java语言为载体,逐步引导读者熟悉编程世界。 1. ...

    计算机编程精髓

    #### 一、理解编程的本质 编程,即编写程序,是通过特定的编程语言向计算机发出指令,以实现预定的功能或解决问题的过程。编程的本质在于逻辑思维与问题解决能力的体现。一个优秀的程序员不仅要掌握一门或多门编程...

    JavaWeb中的Servlet概述,帮助初学者认识何为Servlet

    在JavaWeb中,Servlet是一个核心概念,对于初学者来说,理解Servlet的含义和作用至关重要。 1. **Servlet简介** Servlet是Java编写的服务端组件,主要用于扩展Web服务器的功能。它们接收来自客户端(通常是浏览器...

    何为机器视觉?机器视觉入门 20181126

    机器视觉是一种技术,它使计算机和自动化设备能够“看”并理解现实世界,进而执行基于图像的任务。在本文中,我们将深入探讨机器视觉的基本概念、组成部分、应用领域以及其在现代科技中的重要性。 首先,我们要理解...

    何为区块链技术.pdf

    何为区块链技术

    何为行为财务学

    何为行为财务学

    Python面向对象之类和实例用法分析

    虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程。至于何为面向对象,在此就不详说了。面向对象程序设计本身就很值得深入学习,如要了解,请参阅网上其他的资料。 面向对象最重要的概念就是类...

    Servlet概述的详细文档,帮助初学者认识何为servlet

    # 一、JavaWeb介绍 ## 1、Web ...是建立在**Internet**上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的...

    何为Agile,何为Scrum

    - **XP**:规定了诸如测试驱动开发(TDD)、结对编程等严格的工程实践。 - **Scrum**:对工程实践不做强制要求,强调团队自主选择合适的方法。 ### 总结 敏捷开发和Scrum都是为了提高软件开发效率和产品质量而设计...

    通过代码入门Spring②何为AOP

    在Spring框架中,AOP(Aspect Oriented Programming,面向切面编程)是一个核心概念,它扩展了OOP(Object-Oriented Programming,面向对象编程)的思维,将关注点分离,使得我们可以更灵活地管理横切关注点,如日志...

Global site tag (gtag.js) - Google Analytics