[设计模式] - 适配器模式 亡羊补牢,犹未晚矣_更多的使用适配器可以减少系统复杂性-程序员宅基地

技术标签: 适配器模式  设计模式  

适配器模式(adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。

适配器模式适用场景

  1. 已经存在的类,他的方法和需求不匹配的情况
  2. 适配器模式不是软件你设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同的情况下的解决方案。

适配器模式的应用场景

在手机充电时,我们通常用5V充电,而家里的电压却是220V。这时就需要我们的适配器 — 充电器了。
首先,创建AC220类,表示220V交流电

public class AC220 {
    

    public int output220V(){
    
        int output = 220;
        System.out.println("输出交流电:"+output+"v");
        return output;
    }
}

接着创建DC5接口,表示5V直流电的标准

public interface DC5 {
    
    int output5V();
}

创建电源适配器 PowerAdapter,让电源适配器实现DC5的标准。采用一种特殊的工艺,把220V降到5V。。。

public class PowerAdapter implements DC5 {
    

    private AC220 ac220;

    public PowerAdapter(AC220 ac220) {
    
        this.ac220 = ac220;
    }

    @Override
    public int output5V() {
    
        int adapterInput = ac220.output220V();
        int adapterOutput = adapterInput/44;
        System.out.println("使用充电器前电压:"+adapterInput+"v,使用之后:"+adapterOutput+"v");
        return adapterOutput;
    }
}

最后是测试

public class Test {
    
    public static void main(String[] args) {
    
        DC5 dc5 = new PowerAdapter(new AC220());

        dc5.output5V();
    }
}

通过电源适配器实现了二者的兼容。

适配器模式的优缺点

优点:

  1. 能提高类的透明性和复用,现有类复用但不需要改变。
  2. 目标类和适配器类解耦,提高程序的扩展性。
  3. 在业务场景中符合开闭原则
    缺点:
  4. 适配器编写过程需要全面考虑,可能会增加系统复杂性。
  5. 增加代码阅读难度,降低代码可读性,过多使用适配器会使系统变得凌乱。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuskzuo/article/details/89115570

智能推荐

【USRP】产品型号、参数、架构全解析系列 9:X410_usrp x410-程序员宅基地

文章浏览阅读1.4k次。通用软件无线电外设( USRP ) 是由 Ettus Research 及其母公司National Instruments设计和销售的一系列软件定义无线电。USRP 产品系列由Matt Ettus领导的团队开发,被研究实验室、大学和业余爱好者广泛使用。_usrp x410

两轮机器人小车的里程计设计(一)——航迹推演_轮式里程计行迹推算-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏34次。做机器人底层程序的时候,经常用到航迹推演(Odometry),无论是定位导航还是普通的方向控制。航迹推演中除了对机器人位姿进行估计,另一个很重要的关系是移动机器人前进速度、转向角速度与左轮速度、右轮速度之间的转换。 在机器人局部路径规划算法DWA解析一文中,是在假设已知机器人前进线速度和角速度的情况下,对机器人航迹推演的位姿进行推导了,然而缺少如何通过左右轮速度得到、,因此本文将补上这个空缺。 ..._轮式里程计行迹推算

R语言空间数据分析学习笔记3——坐标系设置_r语言设置rasterlayer的坐标系为gcs_krasovsky_1940-程序员宅基地

文章浏览阅读7.2k次。地理空间数据一般都带有坐标系,最常用的是WGS 84,如果我们已经读入了一个地理数据,比如保存在data中,那么可以查看它的空间坐标系:library(pacman)p_load(sf)data = st_read("G:/Rdata/China/fujian1.shp")# Reading layer `fujian1' from data source `G:\Rdata\China\fujian1.shp' using driver `ESRI Shapefile'# Simple feat_r语言设置rasterlayer的坐标系为gcs_krasovsky_1940

Cglib动态代理-程序员宅基地

文章浏览阅读306次,点赞5次,收藏4次。Cglib 的动态代理,就是子类继承父类。即:通过生成一个被代理对象的子类,然后重写父类的方法,所以目标类和方法不能声明为 final 类型,可以强制转化为被代理类(也就是自己写的类),即父类引用指向子类对象;

【附源码】JAVA计算机毕业设计网络课程考试(源码+mysql+文档)-程序员宅基地

文章浏览阅读856次,点赞9次,收藏7次。对于学生而言,网络课程考试系统提供了一个灵活的学习平台,学生可以根据自己的时间安排选择考试时间,同时也能够在更加宽松的环境中展示自己的学习成果。特别是在全球性的疫情影响下,线上教育的需求量急剧增加,这不仅推动了远程教学模式的创新,也对网络课程考试系统提出了更高的要求。基于Java的网络课程考试系统可以充分利用Java的优势,实现一个稳定、可扩展的在线考试环境。综上所述,基于Java的网络课程考试系统不仅能够满足现代教育的需求,还能够推动教育信息化进程,对提升教育质量和效率具有深远的影响。

拖控件自动生产html,GitHub - yandou/Bootstrap-Form-Builder: 表单生成器,拖拽自定义表单,生成表单html以及表单控件json。在原有代码上简化了表单控件数量...-程序员宅基地

文章浏览阅读273次。#Bootstrap Form BuilderWarning: Currently using Bootstrap v. 2.3.1 ???? (Not Bootstrap 3 ready.)##What's this?A Drag-and-drop form builder for twitter bootstrap.##Where can I see it in action?It's hoste..._在线构建器:拖动表单元素生成相应的html代码。

随便推点

在MyBatis-Plus中实现字段加密与解密_mybatis-plus-encrypt-程序员宅基地

文章浏览阅读855次,点赞5次,收藏11次。在MyBatis-Plus中实现字段加密与解密_mybatis-plus-encrypt

web概述04(table的使用)_web如何用table键-程序员宅基地

文章浏览阅读412次。table的使用_web如何用table键

STM32F103C8T6-RS485通讯完整版_stm32中rs485-程序员宅基地

文章浏览阅读2.5k次,点赞15次,收藏45次。RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可。单片机串口通讯有着许多通讯方式,例如R485/RS232/RS422/TTL/网口等等,在现实生活中RS485通讯是使用频率最高的一种通讯方式,因为485通讯是采用一对多的通讯方法,何为一对多,即一个主机若干个从机,一个负责发数据,其他负者数据的接收;其中帧头是判断整体设备通讯接收数据的正确性,地址是用来区分接收设备的判断,帧尾一般是数据包的校验和,这样帧尾是随着数据的变化而变化,通讯失准确性更加精准。_stm32中rs485

linux 安装第三方报错_linux软件包未被升级-程序员宅基地

文章浏览阅读501次。需求tarena@tarena:~$ sudo apt-get install memcached[sudo] tarena 的密码:问题正在读取软件包列表… 完成正在分析软件包的依赖关系树正在读取状态信息… 完成memcached 已经是最新版 (1.5.6-0ubuntu1.1)。升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 360 个软件包未被升级。..._linux软件包未被升级

android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...-程序员宅基地

文章浏览阅读321次。android获取手机信息大全,android获取大全,IMEI号,IESI号,IMEI号,IESI号,手机型号:[java] view plaincopyprint?private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemService(TELEPHONY_SERVIC..._android 6.0获取imei号

修改mysql数据库导入sql文件大小限制_mysql8 导入大小设置-程序员宅基地

文章浏览阅读5.9k次。1、打开PHP.ini。找到 upload_max_filesize memory_limit post_max_size 这三个参数!(在默认的情况下,php只允许最大的上传数据为2M,也就是2048KB,而极限的最大使用内存memory_limit也仅为128M,Post的最大也为2M)2、按您的服务器的实际性能配置进行如下改动:(注意:以下是按我的服务器性能和硬_mysql8 导入大小设置

推荐文章

热门文章

相关标签