设计模式之适配器模式

什么是适配器模式?看(盗来的)图。

设计模式之适配器模式_第1张图片
适配器模式
设计模式之适配器模式_第2张图片
适配器模式

足够直观,不费口舌解释了。

直接上代码。适配器模式分为三种:

类的适配器模式

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() {
    }
}

一个接口中定义了多个方法,但是,子类又不想每个方法都去实现一下,怎么办呢?中间放一个抽象类作为适配器。这样,子类就可以有选择的重写自己真正需要的方法了。

你可能感兴趣的:(设计模式之适配器模式)