什么是适配器模式?看(盗来的)图。
足够直观,不费口舌解释了。
直接上代码。适配器模式分为三种:
类的适配器模式
public class DataProvider {
public String getUserInfoVersion1(int userid) {
return "this is userinfo";
}
}
public interface IAdapter {
String getUserInfoVersion2(int userid);
}
public class MyAdapter extends DataProvider implements IAdapter {
@Override
public String getUserInfoVersion2(int userid) {
return getUserInfoVersion1(userid);
}
}
public class MyClient {
IAdapter adapter = null;
private void getUserInfoVersion2(int userid) {
adapter = new MyAdapter();
adapter.getUserInfoVersion2(userid);
}
}
MyAdapter完成了从方法getUserInfoVersion2到getUserInfoVersion1的转换。
对象的适配器模式
MyAdapter稍作修改。
public class MyAdapter extends DataProvider implements IAdapter {
DataProvider dataProvider = null;
public MyAdapter(DataProvider dataProvider) {
this.dataProvider = dataProvider;
}
@Override
public String getUserInfoVersion2(int userid) {
return dataProvider.getUserInfoVersion1(userid);
}
}
public class MyClient {
IAdapter adapter = null;
private void getUserInfo(int userid) {
DataProvider dataProvider = new DataProvider();
adapter = new MyAdapter(dataProvider);
adapter.getUserInfoVersion2(userid);
}
}
接口的适配器模式
public interface IAdapter2 {
void method1();
void method2();
void method3();
void method4();
void method5();
void method6();
}
public abstract class MyAdapter2 implements IAdapter2 {
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
@Override
public void method4() {
}
@Override
public void method5() {
}
@Override
public void method6() {
}
}
public class MyClient2_1 extends MyAdapter2 {
@Override
public void method1() {
}
@Override
public void method2() {
}
}
public class MyClient2_2 extends MyAdapter2 {
@Override
public void method4() {
}
@Override
public void method5() {
}
}
一个接口中定义了多个方法,但是,子类又不想每个方法都去实现一下,怎么办呢?中间放一个抽象类作为适配器。这样,子类就可以有选择的重写自己真正需要的方法了。