当前位置: 首页 > news >正文

网站预算表怎么做怎么申请一个网站

网站预算表怎么做,怎么申请一个网站,wordpress 添加点赞,个人博客自我介绍文章目录 引言适配器模式简介定义与用途:实现方式:类型 使用场景优势与劣势适配器模式在Spring中的应用多媒体播放器示例代码地址 引言 在我们的日常生活中,适配器无处不在:无论是将不同国家的插头转换成本地标准,还是…

文章目录

  • 引言
  • 适配器模式简介
    • 定义与用途:
    • 实现方式:
      • 类型
  • 使用场景
  • 优势与劣势
  • 适配器模式在Spring中的应用
  • 多媒体播放器示例
  • 代码地址

引言

在我们的日常生活中,适配器无处不在:无论是将不同国家的插头转换成本地标准,还是连接新型耳机和传统音频端口,适配器在我们生活中扮演着重要角色。同样,在软件开发领域,适配器模式也扮演着类似的角色,帮助不兼容的接口实现协同工作。想象一下,如果你有两个组件,它们功能强大,但因为接口不匹配而无法一起工作,该怎么办?适配器模式在这里就像是一个多功能转换插头,连接这些组件,让它们可以协同工作。

适配器模式简介

适配器模式是一种结构型设计模式,它允许你将一个类的接口转换成客户端期望的另一种接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。

定义与用途:

  1. 适配器模式主要用于解决两个已有接口之间不匹配的问题,无需修改现有的代码。
  2. 它常用于系统升级或整合过程中,特别是在需要整合第三方库或遗留系统时。

实现方式:

通过将类的实例化过程从客户端代码转移到工厂类,从而减少客户端的复杂性。
适配器模式通常通过创建一个包装类,这个包装类持有一个对已有类的引用,并实现了目标接口。

类型

适配器模式主要有两种类型:

  • 类适配器(Class Adapter):通过继承来实现适配。
  • 对象适配器(Object Adapter):通过组合来实现适配。

使用场景

适配器模式在以下情况下非常有用:

  • 当你想使用一些现有的类,但其接口不符合你的需求。
  • 当你想创建一个可重用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
  • 当你需要使用几个现有的子类,但是不可能对每一个都进行子类化以匹配它们的接口。适配器可以调整其父接口。

优势与劣势

  • 优势
  • 增加了类的透明性:隐藏了具体实现,客户端代码可以通过统一的接口与不同的实现进行交互。
  • 提高了类的复用性:原本由于接口不兼容无法一起工作的类可以在适配器的帮助下协同工作。
  • 灵活性和扩展性:可以在不修改原有代码的情况下引入新的适配器,使得系统更加灵活。
  • 劣势
  • 过多的使用会使系统变得杂乱:每个适配器都会增加系统的复杂性。
  • 可能会导致代码理解和维护的困难:特别是当有很多适配器参与时,理解它们之间的关系可能会很困难。
  • 增加系统的代码量:为了适配不同的接口,可能需要编写额外的适配器代码。

适配器模式在Spring中的应用

Spring框架中广泛应用了适配器模式,尤其在Spring MVC框架中。Spring用适配器模式来兼容不同类型的控制器实现。

HandlerAdapter:在Spring MVC中,HandlerAdapter 负责将多种类型的请求
处理器(如Controller接口、HttpRequestHandler和SimpleControllerHandlerAdapter)
适配为一个统一的处理流程。视图适配器:Spring MVC使用视图适配器将不同的视图技术(如JSP、
Freemarker、
Thymeleaf)整合到同一模型中,使得控制器可以透明地使用它们。数据访问适配器:Spring通过数据访问适配器简化了对不同数据源的访问,
如JDBC、Hibernate、JPA等,使得业务逻辑可以从具体的数据访问技术中解耦。

多媒体播放器示例

在这个示例中,我们有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的具体类 AudioPlayer。AudioPlayer 默认可以播放 mp3 格式的音频文件。

我们还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的具体类。这些类可以播放 vlc 和 mp4 格式的文件。

我们希望 AudioPlayer 也能播放其他格式的音频。为了实现这一点,我们创建了一个适配器类 MediaAdapter,它实现了 MediaPlayer 接口,并使用 AdvancedMediaPlayer 对象来播放所需的格式。

AudioPlayer 使用适配器类 MediaAdapter 并传递它所需的音频类型,而不需要知道实际上哪个类可以播放所需的格式。AdapterPatternDemo(我们的演示类)将使用 AudioPlayer 类来播放各种格式的音频。

在这里插入图片描述
步骤 1:
创建媒体播放器和高级媒体播放器的接口。

public interface MediaPlayer {public void play(String audioType, String fileName);}
public interface AdvancedMediaPlayer {public void playVlc(String fileName);public void playMp4(String fileName);
}

步骤 2:
创建实现 AdvancedMediaPlayer 接口的具体类。

public class VlcPlayer implements AdvancedMediaPlayer{@Overridepublic void playVlc(String fileName) {System.out.println("播放 VLC 文件。名称: " + fileName);}@Overridepublic void playMp4(String fileName) {// 无操作}}
public class Mp4Player implements AdvancedMediaPlayer {@Overridepublic void playVlc(String fileName) {// 无操作}@Overridepublic void playMp4(String fileName) {System.out.println("播放 MP4 文件。名称: " + fileName);}}

步骤 3:
创建实现 MediaPlayer 接口的适配器类。

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();}}@Overridepublic void play(String audioType, String fileName) {if(audioType.equalsIgnoreCase("vlc")){advancedMusicPlayer.playVlc(fileName);} else if(audioType.equalsIgnoreCase("mp4")){advancedMusicPlayer.playMp4(fileName);}}
}

步骤 4:
创建实现 MediaPlayer 接口的具体类。

public class AudioPlayer implements MediaPlayer {MediaAdapter mediaAdapter;@Overridepublic void play(String audioType, String fileName) {// 内置支持播放 mp3 音乐文件if(audioType.equalsIgnoreCase("mp3")){System.out.println("播放 mp3 文件。名称: " + fileName);}// mediaAdapter 提供支持播放其他文件格式else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")){mediaAdapter = new MediaAdapter(audioType);mediaAdapter.play(audioType, fileName);}else {System.out.println("无效媒体。" + audioType + " 格式不支持");}}}

步骤 5:
使用 AudioPlayer 来播放不同类型的音频格式。

public class AdapterPatternDemo {public static void main(String[] args) {AudioPlayer audioPlayer = new AudioPlayer();audioPlayer.play("mp3", "beyond the horizon.mp3");audioPlayer.play("mp4", "alone.mp4");audioPlayer.play("vlc", "far far away.vlc");audioPlayer.play("avi", "mind me.avi");}
}

在这里插入图片描述

代码地址

23种设计模式相关代码后续会逐步提交到github上,方便学习,欢迎指点:
代码地址
https://github.com/RuofeiSun/lf-23Pattern

http://www.mfbz.cn/news/718/

相关文章:

  • 建设个人网站需要多少钱手机网页制作
  • 网站群建设规范我国的网络营销公司
  • 苏州外贸网站制作公司网络营销比较常用的营销模式
  • 品牌网络市场环境调研报告安卓系统最好优化软件
  • 中山医疗网站建设发帖推广百度首页
  • 数码b2c网站百度关键词刷搜索量
  • seo教程资源潍坊百度seo公司
  • iis 配置网站 404页面广告策划案优秀案例
  • 网站查询ipgoogle优化排名
  • 广告平面设计欣赏品牌seo培训
  • 网站建设美国网站排名靠前方法
  • 个人网站建设分几个步走seo职业培训班
  • 企业活动网站创意案例市场营销比较好写的论文题目
  • 自己做的网站怎么接入银联支付最新国内新闻重大事件
  • 网站排名做不上去吗济南seo网站排名关键词优化
  • wordpress 企业网站 授权费app制作一个需要多少钱
  • 北京给公司做网站多少钱太原关键词排名推广
  • 网站建设 交易保障软文案例300字
  • 建设网站需要分析什么条件网站制作流程图
  • 顶尖的设计网站谷歌官网入口手机版
  • 标识设计网站app推广方法及技巧
  • 黄页网站大全在线看免费成都网站推广经理
  • 搭建论坛网站十大流量平台
  • 今日实时新闻更新seo的中文含义是
  • 请拿笔记记下新域名360优化大师官方免费下载
  • 网站建设公司i搜索引擎优化有哪些要点
  • 推广公司的网站强强seo博客
  • 垂直网站建设的关键因素bt兔子磁力搜索引擎最新版
  • 网站备案信息的核查方式百度登录首页
  • 仙游莆田交友网站深圳网站提升排名