适配器模式常用来进行补救
分为2种 类适配器 和 对象适配器
第一种 类适配器
假如需要一个类实现一个方法dothing(String a)
这里假定让B类去实现,首先建立一个适配器(AdaperClassInterface一个接口)
而我们发现A类正好有一个dosomething(String a)方法实现了dothing方法
那么我们可以这么写
类A
/**
* 类适配器
* 类A提供了实现适配器方法dothing的一个方法 dosomething
* @author Administrator
*
*/
public class A {
public void doSomething(String a){
}
}
类B
/**
* 类B可以这么写(类适配器方法)
* @author Administrator
*
*/
public class B extends A implements AdaperClassInterface{
@Override
public void doThing(String a) {
doSomething(a);
}
}
接口AdaperClassInterface
/**
* 适配器,适配所有dothing方法
* @author Administrator
*
*/
public interface AdaperClassInterface {
public void doThing(String a);
}
第2种 对象适配器
通常适配的方法可以有很多,比如AdaperClassInterface 中在增加undothing(String a,String b)
如下
/**
* 适配器,适配所有dothing,undoThing方法
* @author Administrator
*
*/
public interface AdaperClassInterface {
public void doThing(String a);
public void undoThing(String a,String b);
}
类A不变
/**
* 类A提供了实现适配器方法dothing的一个方法 dosomething
* @author Administrator
*
*/
public class A {
public void doSomething(String a){
}
}
类C
public class C {
public void undoSomething(String a,String b){
}
}
类B
/**
* 类B可以这么写(对象适配器方法)
* @author Administrator
*
*/
public class B implements AdaperClassInterface{
/**
* 将类A和C引进来,主要是因为java不能多继承,spring架构其实也是用了这种方法代替多继承
*/
public A aclass;
public C cclass;
public void setCclass(C cclass) {
this.cclass = cclass;
}
public void setA(A aclass) {
this.aclass = aclass;
}
@Override
public void doThing(String a) {
aclass.doSomething(a);
}
@Override
public void undoThing(String a, String b) {
cclass.undoSomething(a, b);
}
}