.Net关于设计模式的面试题

news/2024/11/29 20:03:06/

设计模式面试题

1、那些地方用到了单例模式

答:

  1. 网站的计数器,一般也是采用单例模式实现,否则难以同步。
  2. 应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。
  3. 多线程的线程池的设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制
  4. Windows的(任务管理器)就是很典型的单例模式,他不能打开俩个
  5. windows的(回收站)也是典型的单例应用。在整个系统运行过程中,回收站只维护一个实例。

2、举一个用 .Net5中实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次?

答:装饰模式增加强了单个对象的能力。.Net5 IO 到处都使用了装饰模式,典型例子就是 Buffered 系列类如 BufferedStream 它们增强了 Stream 对象, 以实现提升性能的 Buffer 层次的读取和写入。

3、适配器模式是什么?什么时候使用?

答:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。适配器模式提供对接口的转换。如果你的客户端使用某些接口,但是你有另外一些接口,你就可以写一个适配去来连接这些接口。

4、适配器模式与装饰器模式有什么区别?

答:虽然适配器模式和装饰器模式的结构类似,但是每种模式的出现意图不同。适配器模式被用于桥接两个接口,而装饰模式的目的是在不修改类的情况下给类增加新的功能。

装饰者模式:动态地将责任附加到对象上,若要扩展功能,装饰者模提供了比继承更有弹性的替代方案。

通俗的解释:装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

适配器模式有三种:类的适配器模式、对象的适配器模式、接口的适配器模式。

通俗的说法:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。

5、适配器模式和代理模式之间有什么不同?

答:这个问题与前面的类似,适配器模式和代理模式的区别在于他们的意图不同。由于适配器模式和代理模式都是封装真正执行动作的类,因此结构是一致的,但是适配器模式用于接口之间的转换,而代理模式则是增加一个额外的中间层,以便支持分配、控制或智能访问。

6、使用工厂模式最主要的好处是什么?你在哪里使用?

答:工厂模式的最大好处是增加了创建对象时的封装层次。如果 你使用工厂来创建对象,之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类,这不需要在调用层做任何修改。可以看我的文章工厂模式得更详细的解释和和了解更多的好处。

7、什么时候使用享元模式?

答:享元模式通过共享对象来避免创建太多的对象。为了使用享元模式,你需要确保你的对象是不可变的,这样你才能安全的共享。Net5中 String 池、Integer 池以及 Long 池都是很好的使用了享元模式的例子。

8、什么是责任链设计模式

答:责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

9、你可以说出几个在.Net5中使用的设计模式吗?

答:装饰器设计模式(Decorator design pattern)被用于多个.Net5 IO类中。单例模式(Singleton pattern)用于Runtime,Calendar和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如HttpClient,像HttpClientFactory,观察者模式(Observer pattern)被用于DiagnosticSource和很多的事件监听中。


http://www.ppmy.cn/news/102016.html

相关文章

操作系统学习笔记

什么是操作系统? 操作系统(os)是管理计算机硬件和软件资源的计算机程序,提供一个计算机用户与计算机硬件系统之间的接口。 向上对用户程序提供接口,向下接管硬件资源。 操作系统本质上也是一个软件,作为…

Spring Cloud Gateway内置的断言和过滤器作用

文章目录 前言一、内置断言二、内置过滤器1.GlobalFilter2.GatewayFilter 三、配置参数解析模式1.DEFAULT2.GATHER_LIST3.GATHER_LIST_TAIL_FLAG 前言 对应版本3.1.7对应SpringCloud版本2021.0.7 <dependency><groupId>org.springframework.cloud</groupId>…

Word控件Spire.Doc 【其他】教程(3):使用 Marco 加载 Word 、删除 Marco

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

CG-3D渲染器-0.1

引言 在学习GAMES101的路上&#xff0c;我总是会心血来潮&#xff0c;想要做出一个3D渲染器。所谓3D渲染器&#xff0c;就是可以加载模型&#xff0c;并且通过调整参数来渲染出不同的视觉效果。最近看视频看到了第9课&#xff0c;想着做个作业&#xff0c;于是通过作业1接触到…

ChatGPT免费国内在线直连入口,2023持续分享中

这个国内在线版ChatGPT可以提供与OpenAI官方ChatGPT相同的使用效果&#xff0c;让你在不懂技术的情况下轻松接触人工智能。 国内镜像&#xff1a; ChatGPT国内直连版&#xff08;点我&#xff09;http://test.ai111.top 随着OpenAI不断推出更新版本&#xff0c;现在GPT3.5和…

JS的迭代器是啥?精读JS迭代器

目录 前言 概念 优点 用法 对象迭代能力 为什么对象没有迭代器 迭代器的实现 生成器 基础语法 生成器传参 生成器委托 可终止迭代器 总结 前言 在ES6中引入了迭代器的概念&#xff0c;它是一种遍历数据集合的机制&#xff0c;提供了一种简单而一致的方式来访问集…

C#开发的OpenRA游戏之基地工程车移动6

通过前面分析可知,基地工程车的移动是需要采用一种算法来计算路径,这种计算路径的算法叫做A*。如果对这个算法不熟悉,是没有办法把它的代码看懂的,所以我们要先来补一下这个算法内容,了解它为什么需要这样设计。 可以看到下面这段代码: /// <summary> /// Default…

面试:Webpack的核心概念

基本概念 Entry&#xff1a;入口&#xff0c;Webpack 执行构建的第一步将从 Entry 开始&#xff0c;可抽象成输入。Module&#xff1a;模块&#xff0c;在 Webpack 里一切皆模块&#xff0c;一个模块对应着一个文件。Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。Chu…