每天设计者模式-1:基础面试题

embedded/2025/2/22 8:55:44/

在面试中,设计模式相关的问题几乎是必考项,特别是涉及到架构设计、软件开发和嵌入式系统开发等岗位。掌握常见的设计模式及其应用,不仅有助于提升代码质量,还能在面试中表现出扎实的编程能力。今天,我们来探讨面试中高频出现的设计模式基础问题,并结合示例代码,帮助初学者更好地理解。


1. 设计模式基础

1.1 什么是设计模式?为什么要使用设计模式?

解答
设计模式是一套被实践证明可行的、可复用的编程解决方案,适用于特定场景下的软件设计问题。其主要目的是提高代码的可读性、扩展性和复用性。

核心作用:

  • 提高代码复用性:减少重复代码,提高开发效率。
  • 增强系统扩展性:便于后续维护和修改。
  • 提高代码可读性:降低耦合度,改善代码结构。

示例:
假设你需要创建一个日志记录器,在应用程序的多个部分都需要它。你可以使用单例模式来确保日志记录器的唯一性。

java">public class Logger {private static Logger instance;private Logger() {}public static Logger getInstance() {if (instance == null) {instance = new Logger();}return instance;}public void log(String message) {System.out.println("Log: " + message);}
}

1.2 设计模式分为几类?各有哪些模式?

解答
设计模式通常分为三大类:

设计模式类别常见模式
创建型模式工厂方法、抽象工厂、单例、建造者、原型
结构型模式适配器、桥接、组合、装饰器、外观、享元、代理
行为型模式责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者

2. 经典创建型模式

2.1 你如何实现单例模式?有哪些方式?

解答
单例模式保证一个类只有一个实例,并提供一个全局访问点。

常见实现方式:

  1. 饿汉式(类加载时初始化)(线程安全,但可能浪费资源)
java">public class Singleton {private static final Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}
  1. 懒汉式(需要时才创建,但存在线程安全问题)
java">public class Singleton {private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}
  1. 双重检查锁(DCL,推荐,线程安全)
java">public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

2.2 工厂模式和抽象工厂模式有什么区别?

解答

  • 工厂方法模式:定义一个用于创建对象的接口,由子类决定实例化哪种产品。
  • 抽象工厂模式:提供一组相关或依赖的对象的创建接口,避免指定具体的类。

示例代码:

java">interface Product {void use();
}
class ProductA implements Product {public void use() { System.out.println("使用产品A"); }
}
class ProductB implements Product {public void use() { System.out.println("使用产品B"); }
}
abstract class Factory {abstract Product createProduct();
}
class FactoryA extends Factory {public Product createProduct() { return new ProductA(); }
}

3. 结构型模式

3.1 适配器模式和装饰器模式的区别?

解答

  • 适配器模式(Adapter):将一个类的接口转换成客户期望的另一个接口。
  • 装饰器模式(Decorator):在不修改原类的情况下,动态地给对象添加额外的行为。

示例代码省略,完整代码将在后续文章提供。


在这里插入图片描述
在这里插入图片描述

4. 行为型模式

4.1 观察者模式和发布-订阅模式有什么区别?

解答

  • 观察者模式(Observer):对象间一对多的依赖关系,观察者直接订阅被观察者的更新
  • 发布-订阅模式(Pub-Sub):引入消息中间件(如 Kafka、RabbitMQ),发布者和订阅者不直接联系,通过消息通道解耦

示例代码省略,完整代码将在下一篇文章提供。


本篇文章介绍了设计模式的基础概念和常见面试题,并结合示例代码进行讲解。后续将深入探讨每种设计模式的应用,敬请关注!


http://www.ppmy.cn/embedded/164282.html

相关文章

【Linux网络编程】IP协议格式,解包步骤

目录 解析步骤 1.版本字段(大小:4比特位) 2.首部长度(大小:4比特位)(单位:4字节) 🍜细节解释: 3.服务类型(大小:8比特…

坐井说天阔---DeepSeek-R1

前言 DeepSeek-R1这么火,虽然网上很多介绍和解读,但听人家的总不如自己去看看原论文。于是花了大概一周的时间,下班后有进入了研究生的状态---读论文。 DeepSeek这次的目标是探索在没有任何监督数据的情况下训练具有推理能力的大模型&#…

Pickachu靶场记录

1,暴力破解 1,基于表单的暴力破解 对于简单的密码和用户,可以用字典暴力破解 先随便输入用户名和密码,并用bp抓包 (如果无法抓包,可以先查一下自己的ip地址,先访问自己的ip在近靶场&#xf…

语音直播交友app出海:语音直播交友系统软件源码搭建国际化发展技术层面分析

随着移动互联网的普及和全球社交需求的增长以及国内如火如荼的Ai大模型引起的全球发展热潮,语音直播软件出海成为了具有巨大发展潜力的业务领域。以下是一些关键的技术方向,将为语音直播软件在国际市场的成功推广及搭建合作奠定基础。 通信技术 实时语音…

当一个后端下载了一个VUE开源项目,怎么开始着手玩一下

当后端想玩一玩前端的时候 写在前面1、你需要安装、学习的东西2、开始一个项目2.1、用vs code打开项目目录2.2、安装项目依赖2.3、启动项目 3、新建一个你自己的页面4、element怎么用 写在前面 这里给你的角色是一个后端开发工程师,会一点浅薄的前端三大件&#xf…

使用echart的dataZoom的labelFormatter自定义时间范围

需求:x轴为时间国际值,所以需要转化成’YYYY-MM-DD HH:mm:ss’格式,又因为时间不连续,没值的时间在数组里直接返回null导致x轴其实间断的,也不需要ehcart自动补齐间断的值让他们联系在一起,所以x轴type为category。导致…

draw.io:开源款白板/图表绘制利器

在工作和学习中,我们常常需要绘制各种图表,例如流程图、思维导图、网络拓扑图等等。一款功能强大且易于上手的图表绘制工具可以极大地提高我们的效率。今天,我要向大家推荐一款开源免费的图表绘制工具—— draw.io,并手把手教你如…

鸿蒙-状态管理V1

目录 前言状态管理V1State装饰器初始化观察能力小坑 Prop装饰器 和 Link装饰器Observed装饰器和ObjectLink装饰器使用示例小结 前言 随着鸿蒙Next的推广,做鸿蒙开发的人是越来越多,提问和寻求帮助的人也是越来越多,就我自己回答的问题而言&a…