Java 设计模式_适配器模式

来源:互联网 发布:算法的定义和特征 编辑:程序博客网 时间:2024/06/05 14:14

Java 设计模式_适配器模式


本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/Rozol/article/details/76154881


将一个类的接口转换成期望的另一个接口,使其能够兼容使用
适配器模式分为: 对象适配器模式 / 类适配器模式 / 缺省适配模式
对象适配器: 将一个接口转成期望的另一个接口
类适配器器: 将一个类转成期望的另一个接口
缺省适配器: 为一个接口提供缺省实现,子类可以重写部分缺省实现进行具体实现

对象适配器模式

public interface OldTarget {    void show1();}
public class OldTargetImpl implements OldTarget {    @Override    public void show1() {        System.out.println("OldTargetImpl");    }}
  • 以上是旧的接口和接口的实现类,但是现在需要使用新接口,我们需要将旧接口(OldTarget) 转为新接口(Target),让他们能够兼容被使用.
public interface Target {    void show1();    void show2();}
public class TargetAdapter implements Target{    private OldTarget mAdaptee;    public TargetAdapter(OldTarget adapter){        mAdaptee = adapter;    }    @Override    public void show1() {        mAdaptee.show1();    }    @Override    public void show2() {        System.out.println("TargetAdapter");    }}
  • 对象适配器(TargetAdapter)就在这里起到了,将OldTarget接口转为我们期望使用的Target,并使旧接口与新接口兼容被使用的

类适配器模式

public class OldClass {    public void show1(){        System.out.println("OldClass");    }}
  • 以上是旧的类(OldClass), 我们期望使用新的接口(ClassTarget), 需要将类转为该接口, 使其能够兼容被使用
public interface ClassTarget {    void show1();    void show2();}
public class ClassAdapter extends OldClass implements ClassTarget{    @Override    public void show2() {        System.out.println("ClassAdapter");    }}
  • 类适配器(ClassAdapter), 在这里起到了将旧的类(OldClass), 转为了我们期望使用的目标接口(ClassTarget), 并使旧类和新接口能够兼容被使用

缺省适配模式

public interface Interfaces {    public abstract void show1();    public abstract void show2();    public abstract void show3();    public abstract void show4();    public abstract void show5();}
  • 这个接口里定义了n个方法, 我们期望子类能够根据自身需要重写他, 而不是重写全部的未实现方法
public class InterfacesAdapter implements Interfaces{    @Override    public void show1(){}    @Override    public void show2(){}    @Override    public void show3(){}    @Override    public void show4(){}    @Override    public void show5(){}}
  • 缺省适配器(InterfacesAdapter),就在这起到了, 子类只需重写适配器里的部分自身所需要的方法, 对其进行实现

使用

public class Test {    public static void main(String[] args) {        // 对象适配器        objAdapter();        // 类适配器        classAdapter();        // 缺省适配器        defaultAdapter();    }    /**     * 将一个接口转成期望的另一个接口     */    private static void objAdapter() {        TargetAdapter adapter = new TargetAdapter(new OldTargetImpl());        adapter.show1();        adapter.show2();    }    /**     * 将一个类转成期望的另一个接口     */    private static void classAdapter() {        ClassAdapter adapter = new ClassAdapter();        adapter.show1();        adapter.show2();    }    /**     * 为一个接口提供缺省实现,子类可以重写部分缺省实现进行具体实现     */    private static void defaultAdapter(){        new InterfacesAdapter(){            public void show3() {                System.out.println("Test - InterfacesAdapter");            };        }.show3();    }}
原创粉丝点击