adapter!
原创
©著作权归作者所有:来自51CTO博客作者wx6307135cb9367的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.何谓适配器?
变压器实际就是适配器。
将一个接口转换成客户需要的接口。将一个接口中的功能扩展到另一个类中。(其中接口类不仅仅指那interface,这个是狭隘的);使接口类由于接口不兼容而不能一起工作的一起工作。
2.适配器分类
多功能适配器:就是创建了一个Iworker 接口,并通过该接口连接到workHandler中找到合适的方法调用。
单功能适配器:其则是通过一个Iwork接口,并通过该接口连接到合适的适配器,在通过适配器调用方法。
这两个适配器中单功能适配器为重点。因为spring框架中就用的单功能适配器。
缺省适配器设计模式
当一个接口中具有大量抽象方法时,若一个类只需要使用其中的一小部分方法,其它方法并不需要访问,那么会出现一个问题:
需要定义的这个类(实现了该接口)必须要实现这个接口中的所有方法。而这些方法中由于大多数方法并不需要访问,所以采用空实现的方式来实现(只有一对大括号,没有真正的方法体内容)。这是比较麻烦的。此时可以定义一个一般性的类,让这个类空实现所有方法。当然,也可只空实现不使用的方法,让真正要使用的方法以抽象方法的形式出现。这样,以后再定义该接口的实现类,就不需要直接实现这个接口,而是继承这个一般性的类,重写所要真正访问的方法即可。
这种程序结构,称为缺省适配器设计模式。
3.什么是单功能适配器?
public class Test {
public static void main(String[] args) {
Icooker cooker = new Cooker();
Iprogramn programmer = new programer();
Iteacher teacher = new teacherimple();
Object[] workers = {cooker, programmer,teacher};
for (Object worker : workers) {
Iwork adapter = getAdapter(worker);
adapter.work(worker);
}
}
// 根据worker的具体类型查找与其相匹配的适配器
private static Iwork getAdapter(Object worker) {
Iwork ca = new cookerAdapter();
Iwork pa = new programerAdapter();
Iwork ta = new teacherAdapter();
Iwork[] adapters = {ca, pa, ta};
for (Iwork adapter : adapters) {
if(adapter.support(worker)) {
return adapter;
}
}
return null;
}}
//以下是创建的一个cookerAdapter
public class cookerAdapter implements Iwork{
@Override
public void work(Object worker) {
System.out.println(((Icooker) worker).cooker());;
}
@Override
public boolean support(Object worker) {
return worker instanceof Icooker;
}
}
4.什么是多功能适配器?
多功能适配器就是将多个接口多实现类的方法;
然后由一个多能 功能适配器接口把这些接口到另一个接口 ,最终在测试里面去遍历;
5.多功能适配器代码展示
![adapter!_抽象方法](https://s2.51cto.com/images/blog/202209/28093311_6333a4578717c39295.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
![adapter!_抽象方法_02](https://s2.51cto.com/images/blog/202209/28093311_6333a45798cb219251.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
![adapter!_ico_03](https://s2.51cto.com/images/blog/202209/28093311_6333a457a917f25261.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)