适配器模式(Adapter)
在原类型不做任何改变的情况下,用一个适配器类把一个接口转成另一个接口,扩展了新的接口,灵活且多样的适配一切旧俗。这种打破旧框框,适配新格局的思想,是面向对象的精髓。
以继承方式实现的类的 Adapter模式和以聚合方式实现的对象的Adapter模式,各有千秋,各取所长。
使用情况:系统的数据和行为都正确,但是接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一下现存的类,但是接口又与复用环境要求不一致的情况。
- public class TestAdapter {
- public static void main(String[] args) {
- USB mouse=new Mouse();
- PC pc=new PC();
- PS2 adapter=new USB2PS2Adapter(mouse);
- pc.useMouse(adapter); //通过pc来调用usb接口
- }
- }
- interface PS2{ //转换接口
- void usePs2();
- }
- interface USB{ //usb接口
- void useUsb();
- }
- class Mouse implements USB{ //鼠标类,实现了usb接口
- public void useUsb(){
- System.out.println("通过USB接口工作");
- }
- }
- class PC{ //pc类
- public void useMouse(PS2 ps2Mouse){ //使用鼠标的方法中间传的转换接口的实现类
- ps2Mouse.usePs2();
- }
- }
- class USB2PS2Adapter implements PS2{ //转换接口的实现类(把原接口的调用转换成对目标接口的调用)
- private USB usb;
- public USB2PS2Adapter(USB usb) { //构造方法中usb接口传进来
- this.usb = usb;
- }
- public void usePs2(){ //调用usb接口
- System.out.println("把对usePS2的方法调用转换成对useUSB的方法调用");
- usb.useUsb();
- }
- }