适配器模式(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设备进行使用 } }