Java适配器模式

目录

概念

类适配器模式

对象适配器模式


概念

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。例子:我想用电脑读取TF卡,但是电脑是无法直接读取的,这个时候我们就需要一个读卡器来适配他们两个,让电脑对TF卡可读,这个时候读卡器就充当适配器的角色。

适配器模式分为类结构型模式对象结构型模式两种,类结构型模式类之间的耦合度比后者,且求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。前者不符合合成复用原则。

类适配器模式

现象:电脑可读取SD卡,不可直接读取TF卡,想办法让电脑读取TF卡

首先我们需要一个电脑类

public class Computer {
    //从SD读取数据
    public String readSD(SDCard sdCard){
        return sdCard.readSD();
    }
}

电脑有读取SD卡的功能,所以我们应该传入一个具有SDcard实现的类。我们先创建SDcard接口,再创建它的实现类。

//接口
public interface SDCard {
    //从SD卡读取数据
    String readSD();
}
//实现
public class SDCardImpl implements SDCard {
    @Override
    public String readSD() {
        return "从SD卡读取数据";
    }
}

这个时候我们测试用电脑读取SD卡,发现一切正常。

        //创建计算机类
        Computer computer = new Computer();
        //从sd卡读取数据
        String msg = computer.readSD(new SDCardImpl());
        System.out.println(msg);//从SD卡读取数据

但是我们要做的是读取TF卡

所以,首先我们先要有TFCard接口以及它的实现类

//TF接口
public interface TFCard {
    //从TF卡读取数据
    String readTF();
}
//TF实现类
public class TFCardImpl implements TFCard {
    @Override
    public String readTF() {
        return "从TF卡读取数据";
    }
}

由于无法直接读取TF卡,所以我们加了适配器

//因为电脑可以读取SD卡,所以我们实现SDCard接口
//我们现在想读取TF卡,所以为了使用TF的方法,我们继承了TF的实现类
public class Adapter extends TFCardImpl implements SDCard {
    @Override
    public String readSD() {
        System.out.println("适配读取tf卡");
        return readTF();
    }
}

来看电脑读取TF卡的效果

        //创建计算机类
        Computer computer = new Computer();
        //从适配器读取TF数据
        String msg = computer.readSD(new Adapter());
        System.out.println(msg);
        //适配读取tf卡
        //从TF卡读取数据

对象适配器模式

符合合成复用原则,使用较多。

对于上边代码,主要改写的就是Adapter类。

可以更形象的理解为现实中把TF卡插入读卡器。

public class Adapter implements SDCard {
    private TFCardImpl tfCard;
    public Adapter(TFCardImpl tfCard){
        this.tfCard = tfCard;
    }
    @Override
    public String readSD() {
        System.out.println("适配读取tf卡");
        return tfCard.readTF();
    }
}

测试

        //创建计算机类
        Computer computer = new Computer();
        //创建插入TF卡的适配器
        Adapter adapter = new Adapter(new TFCardImpl());
        //从适配器读取TF数据
        String msg = computer.readSD(adapter);
        System.out.println(msg);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值