我记得我曾经在一篇帖子中提到过,一个接口可以从三方面去考察:
制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者)。
接口本质上就是由制定者来协调实现者和调用者之间的关系。
所以通常说的“面向接口编程”可以理解为:
只有实现者和调用者都遵循“面向接口编程”这个准则,制定者的协调目的才能达到。
一个老生常谈的例子就是JDBC。
很多人费解:既然我每连接一种数据库(如mysql)都要事先部署驱动程序,那我直接访问驱动程序不就行了?还要JDBC干吗?
实际上,JDBC已经起了至关重要的作用了:正因为驱动程序是按照JDBC所规定的方法编写的,你才可以按照JDBC的方式去使用。
换句话说,如果驱动程序提供者不按照JDBC标准来编写,而是按它自己独创的方式编写,那么你在使用驱动程序的时候就要花时间查看驱动程序的文档以搞清楚用法。而当你日后决定使用另一种数据库的时候,这种数据库的驱动程序也不是按照JDBC编写的,你又得去搞清楚另一套完全不同的用法,而你的所有代码都必须做相应的更改。这种代价是不可想象的。
而现在的情况是,驱动程序提供者都按照JDBC规定的方式来编写,程序员都按照JDBC规定的方式来使用。程序员不用关心自己正在使用何种数据库,而驱动程序编写者也不用费尽心力去编写接口文档来向程序员解释驱动程序的用法,大家都向标准看齐就行了。
现在,你觉得面向接口编程的好处还不明显吗?
当你正在你的键盘上打字的时候,你是否想到,你在学校就学会了的打字方法至今还在用,因为所有计算机键盘的布局都是一样的。
这时,你会不会由衷地感激这个设计键盘布局的人呢?正是他让你只要学会一种打字方法就可以用在所有计算机的键盘上。 |