适配器模式,顾名思义,就是去适配另一种模式
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间
举几个例子:
1,我们的电话插座,只有一个三孔的,我们要转变成2孔,就可以去买一个转换器可以
2,我们的电脑键盘或鼠标,有ps2圆孔的接口,也有usb接口,我们也可以用一个转换器来实现,比如我的电脑圆孔的ps2接口坏掉了,我就必须用一个转换器将ps2接口转换成usb接口继续使用
我们现在以鼠标的ps2接口为例
现在我们有一个ps2接口的鼠标,但是我们电脑上的ps2接口坏掉了,需要使用usb接口,我们就去买了一个转换器,ps2tousbport(转换器)
先定义电脑的usb接口和鼠标的ps2接口
//电脑的usb接口 public interface usbport { public void workusb(); } //鼠标的ps2接口 public interface ps2port { public void workps2(); }接下来,因为鼠标是好的,因此鼠标的ps2接口i是可以用的,需要被实现
public class ps2portImpl implements ps2port{ @Override public void workps2() { System.out.println("ps2接口正在工作中"); } }转换器接口实现了电脑的usb接口,只有实现了电脑的usb接口,转换器才有用,不然这个转换器就不能用拉
public class ps2tousbport implements usbport{ @SuppressWarnings("unused") private ps2port ps2; //这里相当于将ps2接口插入到适配器 public ps2tousbport(ps2port ps2){ this.ps2 = ps2; } @Override public void workusb() { System.out.println("开始转换了"); //这里相当于开始转换成usb,他只是转换,而工作还是ps2在工作,因为我们的鼠标还是ps2的 ps2.workps2(); System.out.println("转换成功!现在只能说,相当于usb在工作了"); } }这样,我们通过转换器就使用到了我们买的鼠标了(即是ps2接口)
下面我们看看测试类,测试类也非常简单:
/* * 我现在有一个ps2接口的鼠标 * 但是我电脑的ps2接口坏掉了 * 我现在想买一个usb转换器 * 然后可以使用这个ps2接口的鼠标 */ public class democlient { public static void main(String[] args) { //我需要一个usb接口 usbport usb = new ps2tousbport(new ps2portImpl()); usb.workusb(); System.out.println("电脑上的ps2接口好了,那么我们就不在使用转换器了"); //如果我们电脑上的ps2接口好了,那么我们就不在使用转换器了 ps2port ps2 = new ps2portImpl(); ps2.workps2(); } }上面所提到的就是对象适配器,现在我们看看类适配器,类适配器只需要修改一个转换器即可
public class ps2tousbport1 implements usbport,ps2port{ @Override public void workps2() { System.out.println("ps2接口正在工作中"); } @Override public void workusb() { System.out.println("开始转换"); workps2(); System.out.println("转换成功,已经在运行"); } }测试类中如果电脑的ps2接口能用就直接调用转换器的workps2()方法(即是没有转换),如果电脑的ps2接口不能用,就调用转换器的workusb接口进行转换。
他们的区别在于:
对象适配器实现了客户端想要的接口(USB),在内部有一个被适配对象(PS2)的引用,通过组合实现适配功能。
类适配器实现了客户端想要的接口(USB)和被适配对象接口(PS2),通过继承来实现适配功能。
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情