适配器


拒绝白嫖,白嫖有罪,点个赞再走呗
电脑一般只能读取SD卡,而不能读取TF卡,那么我们想要读取TF卡应该怎么办呢?
当然是通过一个读卡器(适配器)来完成我们的需求。那么我们的程序也是一样的,我们需要用的接口,和能使用的接口不一样怎么办呢——通过适配器就可以了。

类适配器

在这里插入图片描述
接下来我们就实现一下这个用例。
首先我们先看一下我们使用的接口

Computer类

package com.yyp.ClassAdapter;

public class Computer {

    public String readSD(SDCard sdCard) {
        if(sdCard == null) {
            throw new NullPointerException("sd card null");
        }
        return sdCard.readSD();
    }

}

这里只能使用SDCard接口。因此我们要做一个适配器来实现可以使用TFCard接口

SDCard接口

package com.yyp.ClassAdapter;

public interface SDCard {
    public String readSD();
    public void writeSD();
}

TFCard接口

package com.yyp.ClassAdapter;

public interface TFCard {
    public String readTF();
    public void writeTF();
}

SDCardImpl实现类

package com.yyp.ClassAdapter;

public class SDCardImpl implements SDCard{
    @Override
    public String readSD() {
        String msg = "读取SD卡成功";
        return msg;
    }

    @Override
    public void writeSD() {
        System.out.println("写入SD卡成功");
    }
}

TFCardImpl实现类

package com.yyp.ClassAdapter;

public class TFCardImpl implements TFCard{
    @Override
    public String readTF() {
        String msg = "读取TF卡成功";
        return msg;
    }

    @Override
    public void writeTF() {
        System.out.println("写入TF卡成功");
    }
}

有了上面的SD和TF类之后,我们就可以编写适配器类了,我们需要的是满足SDCard接口的,因此我们的配置器类直接实现SDCard接口,继承TFCardImpl类即可。

SDAdapterTF

package com.yyp.ClassAdapter;

public class SDAdapterTF extends TFCardImpl implements SDCard{
    @Override
    public String readSD() {
        return readTF();
    }

    @Override
    public void writeSD() {
        writeTF();
    }
}

最后我们来测试一下

package com.yyp.ClassAdapter;

public class Test {
    public static void main(String[] args) {
        Computer yyp = new Computer();
        System.out.println("类适配器");
        System.out.println(yyp.readSD(new SDCardImpl()));
        System.out.println("=====================");
        System.out.println(yyp.readSD(new SDAdapterTF()));
    }
}

对象适配器

在这里插入图片描述
对象适配器和类适配器的区别就是适配器类的不同,对象适配器是面向目标接口的,将要适配的类作为一个对象封装在一个对象里面。

Computer类

package com.yyp.ObjectAdapter;

public class Computer {

    public String readSD(SDCard sdCard) {
        if(sdCard == null) {
            throw new NullPointerException("sd card null");
        }
        return sdCard.readSD();
    }

}

SDCard接口

package com.yyp.ObjectAdapter;

public interface SDCard {
    public String readSD();
    public void writeSD();
}

TFCard接口

package com.yyp.ObjectAdapter;

public interface TFCard {
    public String readTF();
    public void writeTF();
}

SDCardImpl类

package com.yyp.ObjectAdapter;

public class SDCardImpl implements SDCard {
    @Override
    public String readSD() {
        String msg = "读取SD卡成功";
        return msg;
    }

    @Override
    public void writeSD() {
        System.out.println("写入SD卡成功");
    }
}

TFCardImpl类

package com.yyp.ObjectAdapter;

public class TFCardImpl implements TFCard {
    @Override
    public String readTF() {
        String msg = "读取TF卡成功";
        return msg;
    }

    @Override
    public void writeTF() {
        System.out.println("写入TF卡成功");
    }
}

SDAdapterTF类(重点)

package com.yyp.ObjectAdapter;

public class SDAdapterTF implements SDCard {

    private TFCard tfCard;

    public SDAdapterTF(TFCard tfCard) {
        this.tfCard = tfCard;
    }

    @Override
    public String readSD() {
        return tfCard.readTF();
    }

    @Override
    public void writeSD() {
        tfCard.writeTF();
    }
}

测试

package com.yyp.ObjectAdapter;

public class Test {
    public static void main(String[] args) {
        Computer yyp = new Computer();
        System.out.println("对象适配器");
        System.out.println(yyp.readSD(new SDCardImpl()));
        System.out.println("=====================");
        System.out.println(yyp.readSD(new SDAdapterTF(new TFCardImpl())));
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值