Java编程思想:第9章 接口

接口和内部类为咱们提供了一种将接口与实现分离的更加结构化的方法。设计模式

9.1抽象类和抽象方法工具

若是咱们的基类只是但愿它被继承从而经过它的接口操做导出类,它自己建立对象没有什么意义,那么咱们能够把这个基类设计为抽象类。把在基类中很差实现的方法标记为abstract。这样作可使类的抽象性更加明确。spa

9.2接口设计

interface关键字使得抽象概念更加完全,只提供了形式,没有任何实现。但它不单单是极度抽象的类,它还容许建立出一个能够向上转型成多种类型的类,来实现相似于多重继承的特性。对象

接口中也能够包含域,但这些域是隐式static final的。继承

接口中的方法必须是public(可省略不写),实现类中实现方法也必须是public的。接口

9.3彻底解耦get

只要一个方法操做的是类而非接口,那么你就只能使用这个类及其子类。若是这个方法还想操做其余类型,就会发生错误。而接口就可大大放宽这种限制,使得咱们能够编写复用性高的代码。例如:有一个手机类,接口是播放器play(),有不一样的导出类继承这个手机类,一个方法接收手机对象,调用play方法播放音乐。可是这个方法只能接收手机对象和导出类对象。若是我想让电脑播放音乐,因为电脑不属于手机继承体系,因此不能实现这种功能。可是若是咱们把播放功能抽象到一个接口里,让手机实现这个接口,电脑实现这个接口,那么这个方法只要接收接口参数便可。实现了解耦合。io

若是手机类是咱们建立的,咱们能够直接添加implements,可是若是它是jar里的或者别人的,咱们不能直接修改它怎么办呢?扩展

可使用适配器模式,建立一个适配器类,实现接口,组合所须要的对象,在方法里调用该对象相应的方法。

9.4Java中的多重继承

必定要记住:使用接口的核心缘由就是为了能向上转型成多个基类(以及由此带来的灵活性),第二个缘由就是与使用抽象类相同:防止客户端建立该类的对象。

9.5经过继承扩展接口

利用extends关键字能够扩展接口里的方法

9.6适配接口

使用适配器模式来给现有操做接口方法添加新的操做对象是很是有用的。

9.7接口中的域

隐式的static、final的,在enum出现以前(Java SE5)用它当作常量。

9.8嵌套接口

...

9.9接口与工厂

接口是实现多继承的途径,而生成遵循接口对象的典型方式就是工厂方法设计模式。

原始方式:

方法以接口为参数,void action(Service s){...}

调用的时候if(xxx)action(new SImp1());else if(xxx)action(new SImp2());else if....每一个调用地方都须要直接提供实现类对象。若是须要修改/增长实现类代码就会很冗余。

工厂方式:

void action(ServiceFactory fac){Service s = fac.getService();....}

只须要在factory里改变便可。

9.10总结

任何抽象性都应该是应真正需求而产生的。应该优先选择类而不是接口。若是接口的必需性变得很是明确,那么就进行重构。接口是重要的工具,可是不要滥用它。

相关文章
相关标签/搜索