网上已有很多的教程,不细讲了。可以参考:五分钟了解设计模式(3)---适配器模式
在适配器模式中,一定要识别清楚,Target Adaptee Adapter分别是哪些类或接口,这样才能知道是谁转成谁。
Target: 最终给上下文调用的类
Adaptee: 被适配的类,即需要转成Target
Adapter: 将Target和Adaptee连接起来,起转换作用
ThreadPoolExecutor类提供了submit方法,共有3个重载。这三个方法最终调用到的是execute(Runnable r) 方法,返回一个Future类型的对象(具体为FutureTask类型),相比直接调用execute(Runnable r)方法,调用方可以获得任务执行的结果。三个submit方法, 都使用了适配器模式,才能将顺利调用execute(Runnable r)方法。
实现了Runnable,可以传参给execute方法;实现了Future,可以返回给调用方。
FutureTask作为Adapter,采用的是“类适配器方式”,持有一个Callable(即Adaptee)。
在ThreadPoolExecutor的三个submit方法中,都使用了适配器模式,都使用了其中的“类适配器方式”。
submit方法都返回FutureTask,该类型可以得到运行结果。
submit方法都调用了execute(Runnable r)方法执行任务,传入的具体类型为FutureTask。因此,Target是Runnable,Adapter是FutureTask,Adaptee则是不同的传入参数。
FutureTask的实现方式是持有一个Callable类型的成员变量,因此,对于传入参数为Callable的情况,直接赋值,对于传入参数为Runnable的情况,需要再做一次适配,将Runnable适配成Callable. 在这个转换过程中,Target是Callable,Adaptee是Runnable,Adapter是RunnableAdapter。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/kingsleylam/p/11784777.html
内容来源于网络,如有侵权,请联系作者删除!