设计模式之合而适之的适配器模式

场景简介

最近,隔壁的王大哥带着孩子去国外旅行,带了数码相机,手机等各种电子设备,期盼着与孩子有一次难忘的旅行;然而到了入住的酒店,王大哥傻眼了!!数码相机没电了,正当要充电时发现当地的电源插口跟自己的充电器插头不匹配,只能给当地的设备充电,却不能给自己的设备充电,这可如何是好?

适配器模式

聪明的同学已经想到,他需要一个电源适配器;而我们工作中的用到的适配器模式与此类似,目的是把一个类或者接口适配成用户期待的,将原本不能在一起工作的接口或者类适配成可以在一起工作。通常在适配器模式中有如下几种角色:

  • Target 目标类
  • Adaptee 被适配类
  • Adapter 适配器类

清楚了适配器的定义,您可以思考一下在以上提到的王大哥的例子中,这些角色分别对应的是什么?

代码示例

接下来我们从代码层面理解一下适配器模式。

首先,定义LocalDevice当地设备类

public class LocalDevice {

    protected void doLocalCharging() {
        System.out.println("doLocalCharging");
    }

}

其次,定义Power电源类

public class Power {
    //定义静态充电方法
    public static void charging(LocalDevice device) {
        device.doLocalCharging();
    }
}

然后,定义OtherDevice其他设备,以及CameraDevice照相机设备

public class OtherDevice {

    public void doOtherCharging() {
        System.out.println("doOtherCharging");
    }

}

public class CameraDevice extends OtherDevice {

}

最后,我们来定义设备DeviceAdapter适配器

public class DeviceAdapter extends LocalDevice {

    private OtherDevice device;
    
    public DeviceAdapter(OtherDevice device) {
        this.device = device;
    }

    @Override
    protected void doLocalCharging() {
        device.doOtherCharging();
    }

}

DeviceAdapter继承LocalDevice,并支持OtherDevice类型的成员变量,以此来支持OtherDevice;当然具体在实现适配器的过程中您也可以通过定义接口,实现接口,或者继承等方式,本案例用于简单的说明。

演示类如下:

public class Demo {

    public static void main(String[] args) {
        Power.charging(new LocalDevice());
//        Power.charging(new CameraDevice());//不支持其他设备,编译错误
        Power.charging(new DeviceAdapter(new CameraDevice()));
    }
}

如此一来,我们便通过适配器,使得原有的电源支持我们的设备了。

总结

以上是一个简单的案例用于说明该设计模式,在日常的开发工作中这种设计模式也是经常遇到的,也许没有引起您的注意;例如:在Java IO中,就是便是利用适配器模式将字节流适配成我们常用的字符流

图片由Idea生成
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 类适配器 这种适配方式,由以下几个角色组成:(1)目标(Target)角色:这就是所期待得到的接口。注意:由于这里...
    兜兜_2925阅读 291评论 0 1
  • 设计模式之适配器模式 1.综述 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所...
    Airprince阅读 558评论 0 5
  • 定义 属于结构型模式,其主要作用是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不...
    zjk_00阅读 328评论 0 0
  • 关于早会迟到: 今天早上到公司的时候,发现大家因为堵车都在路上,非常的有意思!就我和文慧在8:20左右到了公司。王...
    祥祥布鲁斯阅读 230评论 0 0
  • 立志用功,如種樹然。方其根芽,猶未有幹;及其有幹,尚未有枝;枝而後葉,葉而後花實。初种根時,只管栽培灌溉,勿作枝想...
    呓言堂阅读 140评论 0 0