前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >23种设计模式,适配器模式实战

23种设计模式,适配器模式实战

原创
作者头像
小马哥学JAVA
发布于 2024-04-06 04:54:27
发布于 2024-04-06 04:54:27
16200
代码可运行
举报
运行总次数:0
代码可运行

适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现。

适配器模式的概念

适配器模式主要用于解决两个已有接口之间不匹配的问题,而不是直接去修改已有的代码,这样做的好处是可以保持已有代码的稳定性和复用性。适配器作为一个中间件,对外提供了期望的接口,内部则使用原有接口进行逻辑处理。

适配器模式的优点

  1. 增强了程序的灵活性和扩展性:通过使用适配器模式,可以在不修改原有代码的情况下使原本不兼容的接口协同工作,增加了程序的灵活性和扩展性。
  2. 复用性:能够让原本由于接口不兼容而不能用的类可以被复用。
  3. 类的透明性:用户通过适配性可以调用目标接口,实现了客户端和目标接口的解耦,提高了类的透明性。

适配器模式的缺点

  1. 过多的使用适配器会让系统非常凌乱:特别是当看到很多适配之后,整个系统的清晰度和易用性可能会下降。
  2. 系统的复杂性增加:引入适配器模式会增加系统的抽象性,理解和维护相对困难。

Java代码示例

以下是适配器模式的一个简单示例,演示如何将一个MediaPlayer接口适配到能够使用更高级的媒体播放器来播放音乐。

首先是基础的MediaPlayer接口和一个AdvancedMediaPlayer接口:

下面是一个使用Java实现适配器模式的例子。在这个例子中,我们将创建一个MediaPlayer接口和两个实现了这个接口的具体类:AudioPlayerMediaAdapterMediaAdapter是一个适配器类,使得AudioPlayer能够播放更多格式的音频文件,而不仅仅是mp3文件。

首先,定义MediaPlayer接口和AdvancedMediaPlayer接口:

java复制代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface MediaPlayer {
    void play(String audioType, String fileName);
}

public interface AdvancedMediaPlayer {
    void playVlc(String fileName);
    void playMp4(String fileName);
}

接着,实现AdvancedMediaPlayer接口的具体类:

java复制代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class VlcPlayer implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {
        System.out.println("Playing vlc file. Name: " + fileName);
    }

    @Override
    public void playMp4(String fileName) {
        //不支持MP4格式
    }
}

public class Mp4Player implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {
        //不支持VLC格式
    }

    @Override
    public void playMp4(String fileName) {
        System.out.println("Playing mp4 file. Name: " + fileName);
    }
}

现在,实现适配器类MediaAdapter

java复制代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MediaAdapter implements MediaPlayer {
    AdvancedMediaPlayer advancedMusicPlayer;

    public MediaAdapter(String audioType){
        if(audioType.equalsIgnoreCase("vlc")){
            advancedMusicPlayer = new VlcPlayer();
        }else if(audioType.equalsIgnoreCase("mp4")){
            advancedMusicPlayer = new Mp4Player();
        }
    }

    @Override
    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("vlc")){
            advancedMusicPlayer.playVlc(fileName);
        }else if(audioType.equalsIgnoreCase("mp4")){
            advancedMusicPlayer.playMp4(fileName);
        }
    }
}

最后,AudioPlayer类使用MediaAdapter来播放不同格式的音频:

java复制代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class AudioPlayer implements MediaPlayer {
    MediaAdapter mediaAdapter;

    @Override
    public void play(String audioType, String fileName) {
        //内置支持播放mp3音乐文件
        if(audioType.equalsIgnoreCase("mp3")){
            System.out.println("Playing mp3 file. Name: " + fileName);
        }
        //mediaAdapter 提供了播放其他文件格式的支持
        else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")){
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        }
        else{
            System.out.println("Invalid media. " + audioType + " format not supported");
        }
    }
}

这个例子中的AudioPlayer可以播放mp3格式的文件,而通过使用MediaAdapter,它也能播放vlc和mp4格式的文件,展示了适配器模式如何使得原本由于接口不兼容而不能一起工作的类能够一起工作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
“新政”不断的智慧城市,如何安全迎接新变革?
在以数字经济发展为重要内容的“十四五规划”迎来“开工”的第一周,两则以数字经济和智慧城市为锚点的政策文件先后从深圳市政府发出:
腾讯安全
2021/01/22
5720
“新政”不断的智慧城市,如何安全迎接新变革?
云安全新底座:智慧城市反脆弱基因的赋能者与守护神
被寄予厚望的智慧城市,正面对越来越多的质疑,复杂系统的脆弱性在近乎全民直播的拷问下暴露无遗。
IT创事记
2022/08/30
4620
云安全新底座:智慧城市反脆弱基因的赋能者与守护神
云原生安全,腾讯产业互联网的底色
三年里,腾讯的推进速度十分明显,纵向深耕垂直行业的云与智慧产业事业群,在智慧零售、智慧医疗、智慧教育、智慧出行、智慧制造、智慧城市等领域,扮演好“数字化助手”;横向形成以云、AI、安全、LBS等为底层基础设施,共同合力推动行业的数字化转型。
科技云报道
2022/04/16
1.3K0
云原生安全,腾讯产业互联网的底色
腾讯安全月报丨0误报通过赛可达认证、DDoS威胁报告发布、CASB方案上线……
1月,《IDC特殊研究:中国智慧城市安全运营中心市场洞察》发布,综合呈现了相关建设现状、实践成果、未来趋势及进阶建议。腾讯智慧城市安全运营中心凭借产品技术实力、方案创新能力及业界最佳实践等综合优势,入选为IDC代表性推荐厂商。其中广东省"数字政府"省市一体化安全运营平台项目被收录为最佳实践。
腾讯安全
2021/02/04
9510
腾讯安全月报丨0误报通过赛可达认证、DDoS威胁报告发布、CASB方案上线……
七项安全技术代表厂商!腾讯云再获Gartner®认可
近日,国际研究机构Gartner® 发布《2023中国网络安全技术成熟度曲线(Hype Cycle for Security in China, 2023)》报告,腾讯云在零信任、云工作负载保护平台、态势感知、攻击面管理、机密计算、多方安全计算和开发安全等七大技术领域被列为代表厂商,再度获得Gartner®认可。
小腾资讯君
2023/10/26
4670
如何建立与智慧城市相匹配的安全体系?
​​据IDC《2019H1全球半年度智慧城市支出指南》,2020年中国市场支出规模将达到266亿美元,是全球仅次于美国的支出第二大国家。计算科技部、工信部、国家测绘地理信息局、发改委所确定的智慧城市相关试点数量,宏观口径上我国智慧城市试点数量已达到749个。
腾讯安全
2020/06/11
6330
如何建立与智慧城市相匹配的安全体系?
IDC垂青的平安智慧城市,为智慧环保上了堂示范课
按照IDC给出的消息,2021年累计收到250多项公众提名,经过六轮严格筛选后最终有16个项目脱颖而出。中国内地仅有两个项目入选,一是平安智慧环保参与承建的深圳市智慧水务一期工程,二是腾讯打造的“一部手机游云南”项目。
Alter聊科技
2023/01/12
3340
全新升级!腾讯专有云SOC打造高效可视的安全管理平台
在专有云环境下,企业的运营人员不仅要面对传统的信息安全问题,业务上云后也让网络边界更加模糊,基于网络或设备边界的网络安全防御技术将难以应对云上的新型威胁。
腾讯安全
2020/04/08
3K0
全新升级!腾讯专有云SOC打造高效可视的安全管理平台
IDC报告:腾讯安全位居中国态势感知领导者地位
11月22日,IDC正式发布《IDC MarketScape: 中国态势感知解决方案市场2021,厂商评估》报告,腾讯安全凭借全面的网络安全态势感知产品体系、领先的市场战略以及丰富的行业实践等优势位居中国态势感知解决方案领导者位置。
腾讯安全
2021/11/25
3.3K0
IDC报告:腾讯安全位居中国态势感知领导者地位
云赛智联与腾讯云达成战略合作,加速智慧城市建设与产业数字化转型
近日,云赛智联股份有限公司与腾讯云计算(北京)有限责任公司在上海签署战略合作协议。
bengbengsu
2023/08/23
8700
云赛智联与腾讯云达成战略合作,加速智慧城市建设与产业数字化转型
又双叒获奖啦!腾讯安全三项成果入选《2021网信自主创新成果推荐手册》
​2021年6月20日,由关键信息基础设施技术创新联盟、《网信自主创新调研报告》编委会和信息安全等级保护关键技术国家工程实验室联合举办的“2021网信自主创新成果交流推广”活动评选结果在第二届中国I²S峰会揭晓。
腾讯安全
2021/07/08
4.2K0
又双叒获奖啦!腾讯安全三项成果入选《2021网信自主创新成果推荐手册》
CSS峰会亮点直击,大咖共议产业上云的安全“最优解”
9月11日,腾讯全球数字生态大会 · CSS互联网安全领袖峰会在云端召开。 “云上”话“上云”,移到云端的CSS以“产业上云、安全先行”为主题,聚焦数字经济下的安全态势、云时代的安全新思维、安全技术的演进与实践。会上,腾讯发布腾讯云原生安全防护体系,与中国信通院等单位联合发布国内首部《云原生安全白皮书》,定义云原生安全概念与内涵,探索安全与云计算的深度融合。同时,针对云时代重建安全边界的命题,腾讯宣布腾讯零信任框架支持移动化SDP模式,进一步解决移动办公安全痛点。 来自腾讯、IDC、小红书、民生银行、信通院、张裕、天融信、看雪学院等多位企业领军人物、技术大咖、专家学者出席大会,共同探索产业安全护航数字经济发展的全新路径。
腾讯安全
2020/09/15
1.5K0
城市云脑“与前进者同行”:智慧城市的底座升级与生态进化
据统计,全球在建的智慧城市有800多个,中国就占了一半以上。伴随城市数字转型的深化以及新基建的提速,国内智慧城市建设的热潮此起彼伏——大多数一、二线城市已雏形初现,还有89%的地级市、47%的县级市正厉兵秣马。
IT创事记
2022/08/30
4410
城市云脑“与前进者同行”:智慧城市的底座升级与生态进化
腾讯安全入选IDC MarketScape数据安全评估报告领导者类别
近日,全球领先的IT市场研究和咨询公司IDC发布了《IDC MarketScape:中国数据安全管理平台2023年厂商评估》报告,报告针对在中国地区提供数据安全管理平台产品/服务的主要技术提供商进行了全面的访谈和评估,腾讯安全在评估中位于领导者类别。
用户9924949
2024/10/28
1940
腾讯安全入选IDC MarketScape数据安全评估报告领导者类别
来,和腾讯一起共建未来城市
打开“云医院”,患者足不出户就可实现在线医疗服务;交通控制系统时时监测车流、人流量,自动调节红绿灯时长,实现出行“一路畅通”…… 在中国,乃至全球许多其他城市,从医疗到交通,再到企业生产、居民生活的方方面面,正在上演惊人的变化,而这些都有赖于智慧城市的快速发展。 如今,智慧城市建设正在世界各国掀起巨浪。在中国,“发展智慧城市”已被写入中国政府工作报告,100%的副省级以上城市,90%的地级以上城市,总计700多个城市(含县级市)提出或在建智慧城市。政策红利持续释放下,智慧城市的万亿级市场空间已然显现。
腾讯技术工程官方号
2019/11/01
1.4K0
来,和腾讯一起共建未来城市
荣获两项认证!腾讯云WeCity未来城市再获新成就!
7月28日,在中国信息通信研究院、中国通信标准化协会联合主办的“2021可信云大会”上,腾讯云拿下了5项大奖和12项可信云认证。 ▼▼▼ 可信云认证评估是国内目前唯一针对云服务的权威认证体系,是业内公认最具权威和市场认可度的云计算标准。 目前,腾讯云已经在云主机、云存储、云数据库等各细分领域评测中,获得54项可信云认证,数量位居中国云厂商第一。 其中,腾讯云WeCity技术平台荣获“数字政府智慧中台评估”认证,使用腾讯专有云(TCE)的“数智贵阳”云平台获得“专有云模式的政务云服务评估”认证。  WeCi
云产品技术支持小助手
2022/06/24
8600
荣获两项认证!腾讯云WeCity未来城市再获新成就!
2019年中国智慧城市发展现状(附PPT及解读)
https://www.iyiou.com/intelligence/insight100847.html
IT阅读排行榜
2019/08/05
3.3K0
2019年中国智慧城市发展现状(附PPT及解读)
腾讯智慧灯杆亮相世界5G大会,赋予智慧城市更多可能
腾讯擎天5G智慧灯杆亮相此次世界5G大会,展示了与互联智慧共同研发的集天线基站+WiFi、智慧照明、信息发布、公共广播系统、环境检测等功能于一体的5G智慧灯杆解决方案,可应用于校园、景区、交通等多种场景,助力推进智慧城市服务升级和模式创新。
腾讯安全
2019/11/22
9020
腾讯智慧灯杆亮相世界5G大会,赋予智慧城市更多可能
“一部手机游云南”荣膺2021年IDC亚太区智慧城市大奖
“一部手机游云南”再获行业大奖!5月18日,IDC亚太区公布了2021年IDC亚太区智慧城市大奖(SCAPA),表彰各获奖城市对住宅、商业和公共空间的使用进行数字化改造而做出的卓越贡献,隶属于14个功能型智慧城市奖项类别的亚太区(不含日本)16个杰出智慧城市项目获此殊荣。 其中,“一部手机游云南”项目被IDC Government Insights评为“经济、旅游、艺术、图书馆、文化及公共空间” 类别的最佳亚太智慧城市项目,这也是亚太地区唯一一个获得此类别奖项的项目。 图片来源:IDC,2021
腾讯文旅
2021/05/21
5500
互联网+智慧城市建设暗战
超级App已经变得无所不能。你无须再随身携带你的积分卡,优惠卡,甚至是银行卡出门,因为已经有多款超级App可以帮助你购买电影票,下载优惠券,甚至是直接缴费买单。 这正是智慧城市所倡导的模式,利用先进信息技术对需求做出智能响应。但是在产业早期,发行实体“市民卡”是解决这一问题的主要办法,后者通常为一张金融IC卡。为了推动这张卡的运行,行业曾有多家公司推出解决方案,从卡本身的硬件属性到市场消费场景的搭建。无论是智能交通,或是智能医疗,还是智慧城市,“市民卡”似乎成为通用的解决模式。 随着“互联网+”时
腾讯研究院
2018/02/05
1.2K0
推荐阅读
相关推荐
“新政”不断的智慧城市,如何安全迎接新变革?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档