前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式-适配器模式】

【设计模式-适配器模式】

作者头像
Liusy
发布2020-09-01 16:23:46
3890
发布2020-09-01 16:23:46
举报
文章被收录于专栏:Liusy01

【导读】如果多样东西需要使用同一件物品,则需要进行适配,比如只有一个电源插口,但有多个需要用电的(有三相插头,有二相插头),此时就需要一个排查器进行适配,使三相和二相插头都能连接电源。再比如,变压器也是一个适配器,电厂来的是几十万伏的电,但家用电是220V,所以需要将几十万伏的电转成220V的电才能进行使用。

一、定义

将一个类的接口转换成期望的接口,使得原本接口不兼容而不能一起工作的类能一起工作。

但是接口之间是没有层次关系的(也就是继承或实现)。

二、实例

比如电源适配的,一般家用电都是220V,但是手机充电只需要5V,此时手机充电器就相当于是一个适配器,将220V转成手机充电需要的5V。

220V电源:

代码语言:javascript
复制
public class AC220V {
    public int output(){
        int output = 220;
        System.out.println("输出"+output+"v");
        return output;
    }
}

需要的5V电源:

代码语言:javascript
复制
public interface DC5V {
    int output();
}

变压器(也就是充电器):

代码语言:javascript
复制
public class Transformer implements DC5V{
    1、包含了220V的属性
    private AC220V ac220V ;
    public Transformer(AC220V ac220V) {
        this.ac220V = ac220V;
    }

    @Override
    public int output() {
        int input = ac220V.output();
        2、经过相应的逻辑转换成需要的5V
        int output = input / 44;
        System.out.println("输入"+input+"v,输出"+output+"v");
        return output;
    }
}

测试类:

代码语言:javascript
复制
DC5V dc5V = new Transformer(new AC220V());
dc5V.output();

运行结果:

接下来看一下类图:

注意看,原有接口AC220V与需要适配的接口DC5V是没有层次关系的,通过适配者类去进行适配。

三、源码实例

Java的IO使用了适配器模式,Reader和InputStream是没有层次关系的。想要将InputStream转成Reader,就需要用到InputStreamReader这个转换接口。

代码语言:javascript
复制
Reader reader =  new InputStreamReader(new FileInputStream("test"));

它们之间的类结构如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档