设计模式----适配器模式

适配器模式在我们的生活当中随处可见,比如说:我们电脑的充电器就是一个适配器,它可以将220V的电压转换成我们电脑可以充电的电压。或者当我们的电脑没有网线接口的时候,我们可以通过一个转换器将USB接口转换为网线接口,然后USB的一段连接电脑,另一端连接到网线。经过适配以后,没有网线接口的电脑也可以使用网线了。

适配器模式就是使得原本由于接口不兼容而不能一起工作、不能统一管理的那些类可以在一起工作、可以进行统一管理。

适配器模式的类图

设计模式----适配器模式_第1张图片

 

此案例的类图,usb接口对应这ITarget,Adaptee对应着INet网卡接口,Adapter为适配器。

设计模式----适配器模式_第2张图片

代码实现

此接口可以被电脑类Computer所识别

package adapter;

/**
 * USB接口
 */
public interface IUsb {
    public void read();
    public void write();
}



package adapter;

/**
 * USB接口的实现类
 */
public class UsbImpl implements  IUsb {
    @Override
    public void read() {
        System.out.println("正在读取Usb接口中的内容");
    }

    @Override
    public void write() {
        System.out.println("正在给通过Usb接口写内容");
    }
}

 网卡接口,Computer类不能识别此接口

package adapter;

/**
 * 网卡接口
 */
public interface INet {
    public void read();
    public void write();
}

package adapter;

/**
 * 网卡接口的实现类
 */
public class NetImpl implements INet {
    @Override
    public void read() {
        System.out.println("正在读取网卡");
    }

    @Override
    public void write() {
        System.out.println("正在给网卡中写内容");
    }
}

Computer类,只能识别USB接口

package adapter;

/**
 * 电脑类,只能识别USB接口
 */
public class Computer {
    private IUsb usb;

    public void read() {
        if(usb==null){
            System.out.println("没有发现可以读取的设备");
            return;
        }
        usb.read();
    }

    public void write() {
        if(usb==null){
            System.out.println("没有发现可以写入的设备");
            return;
        }
        usb.write();
    }

    public IUsb getUsb() {
        return usb;
    }

    public void setUsb(IUsb usb) {
        this.usb = usb;
    }
}

适配器类,使得电脑通过此适配器可以连接到网卡。

package adapter;

/**
 * 适配器类,使得INet接口可以被电脑的USB接口所识别
 */
public class Adapter implements IUsb {

    private  INet net;

    public Adapter(INet net) {
        this.net = net;
    }

    @Override
    public void read() {
        if(net==null){
            System.out.println("没有发现网卡设备");
            return;
        }
        net.read();
    }

    @Override
    public void write() {
        if(net==null){
            System.out.println("没有发现网卡设备");
            return;
        }
        net.write();
    }
}

 

你可能感兴趣的:(设计模式,适配器模式)