接口是用来干啥的:
如果昨天你问我,我会说接口是制定规则,而接口中的方法可以通过不同实现来实现不同的功能,就像我们在对一件事物做出定义,或者在对一类物种做出第一,胎生的,有脊椎动物叫做哺乳动物,于是,所有符合这个规则的新发现的动物,就直接归类到哺乳动物的行列中了。接口是特殊的抽象类,等等。然后是接口的实际应用,spring的ioc,直接在接口中声明接口,然后创建实体类的时候会根据具体实现类来创建,是程序员不再关注具体代码的实现,更加灵活,但是,我这样描述仅仅是说明了接口的作用和具体的表现形式,但重要的是,我们为什么用。
接口的实质:
接口是用来隔离变化的,在很多情况下,程序的实现不能仅限于一种方式,可能在某些方面更需要一些变化,这些变化是在确定的方式上不同的实现而已,例如数据库连接的驱动,sun制定了连接规则,而MySQL,oracle仅需实现所需功能即可,连接的方式是一定的,但具体到连接协议的东西,每个厂家都不相同。接口的好处就是把这些方式规范化之后,不同厂家即使在很多细节上都不相同,但暴露给程序员的调用方式却是与接口定义的方式相同的。程序员想要连接不同的数据库,仅需要调用sun制定的接口,然后调用不同厂家的实现代码即可,大大简化了切换数据库的步骤和代价。
这时在看接口,就会发现,对啊,接口的确隔离了代码变化带来的切换代价,实现了程序的松耦合。
接口玩到这,想我这样的初级程序员还是不知道在何时使用接口,何时不该使用接口。这时,只有一种方式,我会去看框架的源代码,通过对源代码的研究,发现架构大师在处理具体实现的方式。以struts2为例,大家可能都知道一个很重要的类,ObjectFactory,strtus2实现了这个接口,并实现了其中的方法。其中的很多bean都是配置在struts2的配置文件中的,在tomcat启动的时候静态注入的。这样直接通过配置文件静态注入是一种方式,而以也可以自己实现ObjectFactory方法,然后通过你自身的方式注入所需的类,这样的化,自己定制的strtus2就出现了。于是框架有了更多的灵活性,而调用的接口不需要有任何的改变。
衍生的东西:
由此,接口的中的特性使得他可以在框架的编写中占据很高的地位,而根据接口特征对代码的优化衍生出了一些设计模式,如工厂模式,代理模式,观察者设计模式;接口的加强如策略模式...