Java 设计模式_适配器模式

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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值