适配器模式(Adapter )

适配器模式:我的电脑只有Type-c接口,要使用usb设备,那就需要适配器来进行转接。

构成:

  目标接口(Target):用户所期待的接口,抽象类、或者是具体的类,比如电脑上的type-c接口。

  需要适配的类(Adaptee):需要适配器转接后才能使用的类,比如usb设备。

  适配器(Adapter):把不同协议连接起来,使其可以进行沟通的设备,比如usb转type-c的转接器。


 

1、通过继承实现

思路:适配器继承了被适配器,那么就可以使用被适配器的方法了,同时适配器为客户期待的接口实现类,实现适配。

例子:

用户想要使用的usb设备:

public class Usb {
    public void request(){
        System.out.println("usb设备被使用。");
    }
}

用户:想要通过use方法使用到usb设备,需要一个适配器(Target接口的实现类)

public class Client {

    //使用适配器进行使用
    public void use(Target target){
        target.handleReq();//进行使用usb设备
    }
}

Target接口:

public interface Target {
    void handleReq();//通过此方法使用被适配器( usb设备)
}

适配器:继承了Usb类,可以使用Usb的方法,继承了Target,符合用户的需要。适配成功!

public class Type_cToUsb extends Usb implements Target{
    @Override
    public void handleReq() {
        super.request();//调用Usb设备进行使用
    }
}

测试:

public static void main(String[] args) {
        Client client = new Client();
        client.use(new Type_cToUsb());
    }

运行结果:

 2、通过组合实现

Java中为单继承,所以尽量避免使用继承。

适配器:将Usb类组合到适配器类中,即可使用usb的方法,继承目标接口,可被用户调用,适配成功。

public class Type_cToUsb implements Target{
    private Usb usb;

    public Type_cToUsb(Usb usb) {
        this.usb = usb;
    }

    @Override
    public void handleReq() {
        this.usb.request();//调用Usb设备进行使用
    }
}

 

posted @ 2022-11-23 23:38  在博客做笔记的路人甲  阅读(749)  评论(0编辑  收藏  举报