赶紧收藏!2024 年最常见 20道设计模式面试题(四)

2024-06-18 21:52

本文主要是介绍赶紧收藏!2024 年最常见 20道设计模式面试题(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇地址:赶紧收藏!2024 年最常见 20道设计模式面试题(三)-CSDN博客

七、结构型模式:请解释适配器模式和装饰器模式的区别。

适配器模式(Adapter Pattern)和装饰器模式(Decorator Pattern)都是结构型设计模式,它们用于处理对象间的接口不兼容问题,但它们的目的、结构和应用场景有所不同。以下是两种模式的主要区别:

目的:

  • 适配器模式:主要目的是提供一个接口,使得原本不兼容的类能够协同工作。它通常用于将一个类的接口转换成客户端期望的另一个接口。
  • 装饰器模式:主要目的是动态地给一个对象添加额外的职责,而不需要修改原始对象的代码。它通常用于在不改变对象自身的基础上,通过添加装饰类来扩展对象的功能。

结构:

  • 适配器模式

    • 有一个目标接口,定义客户端使用的特定领域相关的接口。
    • 有一个适配者,一个已经存在的类,需要适配。
    • 有一个适配器,它通过在内部包装一个适配者对象,把源接口转换成目标接口。
  • 装饰器模式

    • 有一个抽象组件,定义了可以动态添加的职责。
    • 有一个具体组件,定义了抽象组件的具体实现。
    • 有一个抽象装饰者,持有一个组件接口,并定义了装饰接口。
    • 有多个具体装饰者,实现抽象装饰者,添加额外的职责,并委托给组件对象。

应用场景:

  • 适配器模式

    • 当需要使用一个已有的类,但这个类的接口不符合当前系统的接口规范。
    • 当想要建立一个可复用的类库,该库在不同的应用中以不同的接口形式出现。
  • 装饰器模式

    • 当需要动态地给对象添加职责,同时又希望不修改原有对象的代码。
    • 当需要通过一种动态、可扩展的方式来扩展对象的功能。

使用方式:

  • 适配器模式:通常创建一个适配器类,它内部包含一个适配者对象的引用,通过适配器类的方法将调用转发到适配者对象,并进行必要的转换。
  • 装饰器模式:创建一个装饰者类,它包含一个组件对象的引用,装饰者类实现了与组件相同的接口,并在调用组件方法前后添加额外的功能。

举例:

  • 适配器模式:例如,一个第三方库提供了一个MediaPlayer接口,你有一个OldMediaPlayer类,它有一个playMedia方法。你可以创建一个适配器MediaAdapter,它实现了MediaPlayer接口,内部包含一个OldMediaPlayer对象,并在play方法中调用playMedia方法。
  • 装饰器模式:例如,你有一个Coffee类,它有一个cost方法。你想要添加一些额外的调料,如MilkSugar。你可以创建MilkDecoratorSugarDecorator类,它们都实现了Coffee接口,并在调用cost方法时添加额外的费用。

总结来说,适配器模式主要用于接口转换,而装饰器模式主要用于对象功能的动态扩展。两者都是通过组合而非继承来实现功能的复用和扩展。

八、代理模式:请举例说明何时使用远程代理模式。

远程代理模式(Remote Proxy Pattern)是代理模式的一种变体,主要用于客户端不直接与远程对象交互,而是通过远程代理与远程对象进行通信。远程代理隐藏了对象位于不同地址空间的事实,使得客户端与远程对象的交互就像与本地对象交互一样。

何时使用远程代理模式:

  1. 对象位于不同的地址空间:当对象位于远程服务器或不同的主机上时,远程代理可以作为远程对象的本地代表。

  2. 网络通信:在需要通过网络与远程对象通信的场景中,远程代理可以处理网络请求和响应,简化客户端的通信过程。

  3. 懒加载远程对象:当远程对象的初始化成本较高或需要特定条件才能创建时,远程代理可以在真正需要对象时才进行加载。

  4. 访问控制:远程代理可以添加访问控制逻辑,确保只有授权的客户端才能访问远程对象。

  5. 对象的生命周期管理:远程代理可以管理远程对象的生命周期,例如,当客户端不再使用对象时,代理可以负责释放资源。

  6. 网络容错:远程代理可以在网络出现问题时提供容错机制,例如重试、断线重连等。

举例说明:

假设我们有一个在线文档编辑服务,用户可以通过Web应用程序编辑文档。文档服务运行在远程服务器上,客户端是用户的Web浏览器。

  • 场景:用户希望编辑存储在远程服务器上的文档。

  • 问题:直接与远程服务器交互可能会涉及到复杂的网络编程,并且需要处理网络延迟和断线重连等问题。

  • 解决方案:使用远程代理模式。

    • 远程对象:文档编辑服务,提供文档的读取、编辑和保存功能。
    • 远程代理:在用户的Web应用程序中实现,作为文档服务的本地代表。它处理所有与文档服务的通信,包括请求文档数据、发送编辑指令等。
    • 客户端:用户的Web浏览器,通过远程代理与文档服务交互,而不需要直接处理网络通信的细节。

示例代码(伪代码):

// 远程对象接口
interface DocumentService {void openDocument(String documentId);void editDocument(String content);void saveDocument();
}// 远程对象实现
class RemoteDocumentService implements DocumentService {// 实现文档服务的具体逻辑
}// 远程代理
class RemoteDocumentServiceProxy implements DocumentService {private RemoteDocumentService remoteService;public RemoteDocumentServiceProxy() {// 延迟初始化远程服务this.remoteService = null;}private void initializeRemoteService() {if (this.remoteService == null) {// 连接远程服务器并初始化远程服务this.remoteService = new RemoteDocumentService();}}@Overridepublic void openDocument(String documentId) {initializeRemoteService();remoteService.openDocument(documentId);}@Overridepublic void editDocument(String content) {initializeRemoteService();remoteService.editDocument(content);}@Overridepublic void saveDocument() {initializeRemoteService();remoteService.saveDocument();}
}// 客户端代码
public class Client {public static void main(String[] args) {DocumentService documentService = new RemoteDocumentServiceProxy();documentService.openDocument("doc123");documentService.editDocument("New content");documentService.saveDocument();}
}

在这个例子中,RemoteDocumentService是远程对象,提供文档的编辑服务。RemoteDocumentServiceProxy是远程代理,它在客户端应用程序中实现,用于与远程服务进行通信。客户端代码通过代理与远程文档服务交互,代理负责处理所有与远程服务的通信细节,包括延迟加载远程服务、网络请求等。这样,客户端代码就不需要关心远程服务的具体实现和网络通信的复杂性。

这篇关于赶紧收藏!2024 年最常见 20道设计模式面试题(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073154

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

2024/9/8 c++ smart

1.通过自己编写的class来实现unique_ptr指针的功能 #include <iostream> using namespace std; template<class T> class unique_ptr { public:         //无参构造函数         unique_ptr();         //有参构造函数         unique_ptr(

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败