扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:liyuqigenius 来源:太平洋电脑网 2007年8月25日
关键字:
如果我们决定用JDBC技术来实现User和UserFactory,我们只需要按上面的形式实现JDBCUser和JDBCUserFactory就行了。然后把UserFactory中的getUserFactory方法修改一下就可以改变了它们的实现方法。而我们已经写好的调用UserFactory和User的部分不需要做任何修改。
这是用接口来定义数据结构的一个简单的例子,在实际应用中还有很多灵活的使用方法,大家需要在学习过程中不断的去体会。
四、理解分布式应用的原理
目前有很多软件项目都使用了分布式的技术。Java有多种支持分布式应用的技术,早期用的比较多的有RMI、CORBA等技术,而现在EJB技术更为流行一些。但这些技术不管怎么发展,其实都是以接口为基础的。
以远程方法调用RMI(Remote Method Invocation)为例。在编写RMI应用时,我们需要做两件最基本的事,首先要定义一个接口,这个接口要继承java.rmi.Remote接口,这个接口中应该包含你要从远端调用的方法名。接下来就是写一个类来实现这个接口中的方法。例如:
|
在这个例子中,接口Product是放在客户端的,而ProductImpl是放在服务器端的,客户在使用时只需要用指定的规则得到Product的实例就行了,不用去考虑Product接口里的方法是如何实现的。在定义好这两个类后,用Java开发包命令“rmic ProductImpl”就可以帮助我们自动生成两个类ProductImpl_Skel和ProductImpl_Stub。这两个类就包含了RMI调用的运作机制。有兴趣的朋友可以把这两个类反编译后研究一下。你会发现其中ProductImpl_Stub实际上是接口Product的一个实现类。RMI机制就是用这个类来生成Product的实例供客户端使用。另一个类ProductImpl_Skel则是在服务端响应ProductImpl_Stub的调用请求的类。而RMI最底层的通讯原理则是利用ObjectInputStream和ObjetOutputStream通过Socket将要调用的方法名及参数列表传到服务器端,服务器端再通过特定的方法调用实现类(在本例中是ProductImpl)的对应方法,然后将结果通过Socket传回客户端就行了。由于Skel和Stub类是用工具生成的,所以就大大节省了开发的时间。另外,如果我们需要修改一些实现方法或错误,只需要对服务器端的实现类进行修改就可以了,也就是说这种分布式应用的大部分维护工作在服务器端就可以完成。
现在越来越多的应用使用了EJB这种技术。EJB是从RMI发展而来的一项技术,它比RMI定义得更加完善,可以获得更好的面向对象的特性。但它的规则要比RMI复杂一些。但是不管它多复杂,它同样是使用了接口来定义各种不同的Bean,也同样需要编写相应的实现类来完成具体的功能,最后还要通过Socket来进行通讯。EJB的运作机制本身有一定的复杂性,所以其应用的效率理所当然就会受到一定的影响。因此在选择开发技术时应该根据应用的规模和特点仔细考虑,不一定流行的技术就一定能适应你的应用。如果你很好的掌握了面向对象的设计原则,你就可以自行设计。也许你可以根据自己应用的特点设计出更合适的分布式应用结构。
五、结论
除了上述的一些应用外,还有很多地方可以使用接口,比如在Java的事件机制中就常用到接口。另外,对于一些已经开发好的系统,在结构上进行较大的调整已经不太现实,这时可以通过定义一些接口并追加相应的实现来完成功能结构的扩展。
总之,学好接口可以帮助我们更好的理解和运用面向对象的设计原则。使我们能设计出更好的软件系统。由于本人水平的限制,如有错误之处还请多多指正。谢谢!
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者