设计模式(三)--适配器模式

适配器模式


目的:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.

假设场景:以前的手机是有内存卡的,手机用户把数据放在内存卡里,手机是可以直接读取内存卡中的数据的。但是后来这种用内存卡的手机慢慢被淘汰了,可是你又想读取内存卡中的数据,于是你买了个电脑读取,但是电脑只能读取u盘的数据,不能够直接读取内存卡中的数据,电脑需要读卡器间接读取内存卡中的数据。

这里的内存卡就是需要转换的接口,我们现有的东西(电脑)无法兼容使用这个接口(内存卡),所以我们需要一个适配器(读卡器),让电脑持有读卡器,这样才可以读取内存卡的数据。

编写代码:
U盘 和 内存卡都是外部设备,我们统一编写个抽象类:
package adapter.study;

/**
 * 磁盘
 * @author 阿呆的小鸡仔
 */
public abstract class Disk {
    private String data;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

package adapter.study;

/**
 * 内存卡类
 * @author 阿呆的小鸡仔
 */
public class MemoryCard extends Disk {
}

package adapter.study;

/**
 * U盘
 * @author 阿呆的小鸡仔
 */
public class Udick extends Disk{
}

读卡器和电脑都可以读取外部设备的数据,我们就写个读取外部数据接口:
package adapter.study;


/**
 * 读取外部数据
 * @author 阿呆的小鸡仔
 */
public interface ReadExternalData {
    /**
     * 读取外部数据
     * @param disk 外部介质
     */
    public void read(Disk disk);
}

package adapter.study;

/**
 * 读卡器
 * @author 阿呆的小鸡仔
 */
public class CardReaderAdapter implements ReadExternalData {
    @Override
    public void read(Disk disk) {
        System.out.println("读取了手机内存卡的数据");
    }
}

package adapter.study;

/**
 * @author 阿呆的小鸡仔
 */
public class Computer implements ReadExternalData {


    ReadExternalData readExternalData=new CardReaderAdapter()   ;

    @Override
    public void read(Disk disk) {
        if(disk instanceof Udick){
            System.out.println("电脑读取了U盘数据: "+disk.getData());
        }
        else if(disk instanceof MemoryCard){
            readExternalData.read(disk);
        }
        else {
            System.out.println("电脑无法识别该设备");
        }
    }
}

客户端使用电脑读取内存卡数据:
package adapter.study;

/**
 * @author 阿呆的小鸡仔
 */
public class Client {
    public static void main(String[] args) {
        Disk u=new Udick();
        u.setData("我是U盘!");
        Disk p=new MemoryCard();
        p.setData("我是内存卡");
        ReadExternalData computer=new Computer();
        computer.read(u);
        computer.read(p);
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值