ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式之适配器模式

2021-08-05 19:30:54  阅读:159  来源: 互联网

标签:int 适配器 模式 voltage 电压 设计模式 public


适配器模式

什么是适配器模式

适配器模式是将一个类的接口转换成客户希望的另一个接口,适配器模式可以使原本由于接口不兼容而不能一起工作的那些类可以一起工作。

其原理图如下:

在这里插入图片描述

为什么要使用适配器模式

现在,手机需要进行充电,但是手机需要的是5V的电压,墙上的插口只能提供220V的电压(外国还有110V电压),这显然是不能直接给手机充电的。

在日常生活中,我们是使用电源适配器进行适配,顾名思义,这是一个适配器。我们可以通过手机的充电过程来理解适配器模式:

首先,有一个插孔(墙上或插线板上的220V的插孔):

public class Jack220V {
    public int output220V() {
        System.out.println("墙上插孔 220V 电压输出");
        return 220;
    }
}

指定一个标准,电源适配器需要满足该标准:

public interface IAdapter {
    int input(); // 输入电压

    int convert(); //进行电压转换

    int output(); //输出电压
}

现在的电源适配器:

public class Jack5V implements IAdapter {
    private Jack220V jack = new Jack220V(); //聚合一个被适配的类,以此来使用该类的方法,这种方式叫做对象适配器;也可以让这个类继承被适配的类,也可以达到该效果,只是耦合度有些过高,这种方式叫做类适配器。

    @Override
    public int input() {
        int voltage = jack.output220V();
        System.out.println("电源适配器获取 220V 电压");
        return voltage;
    }

    @Override
    public int convert() {
        int voltage = input();
        System.out.println("电源适配器进行电压变化");
        return voltage / 44;
    }

    @Override
    public int output() {
        int voltage = convert();
        System.out.println("电源适配器输出 5V 电压");
        return voltage;
    }
}

接下来,我们可以进行充电了:

public class Phone {
    public static void main(String[] args) {
        System.out.println("手机充电:");
        Jack5V jack = new Jack5V();
        System.out.println("手机充电电压:" + jack.output() + "V");
    }
}

当前的类图

在这里插入图片描述

什么时候用适配器模式

  • 在使用一个已经存在的类,但是该类的接口与自己所要求的不相同时,此时应该使用适配器模式。

  • 使用适配器模式往往是在软件开发后期或维护期才使用,在设计时期完全可以设计一个更通用的接口或者进行接口的重构使得接口得以适合更多场景的使用。

  • 当然,在特殊情况下,比如需要考虑到使用第三方开发组件,但是这个组件和现有组件不同时,可以考虑使用适配器模式。

标签:int,适配器,模式,voltage,电压,设计模式,public
来源: https://blog.csdn.net/weixin_45413689/article/details/119425217

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有