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

Java 常见的面试题(设计模式)

一、说一下你熟悉的设计模式?

**设计模式:**是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。

**创建型:**Abstract Factory(抽象工厂模式),Builder(建造者模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式);

**结构型:**Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式);

**行为型:**Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),Iterator(迭代模式),Mediator(调停者模式),Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibility(责任链模式)。

二、简单工厂、工厂方法和抽象工厂有何区别?

工厂模式是分为三种,分别是简单工厂,工厂方法,抽象工厂。其中工厂方法和抽象工厂是GoF23种设计模式中的一种,而简单工厂则不是一种设计模式,更加可以理解的是一种编码时候约定俗成的一种习惯。那么,就在接下来三点中分别去分析理解工厂模式。

**简单工厂模式:**是由一个工厂对象创建产品实例,简单工厂模式的工厂类一般是使用静态方法,通过不同的参数的创建不同的对象实例,可以生产结构中的任意产品,不能增加新的产品;

  1. 简单工厂的优点:
    1. 不需要关心类的创建细节。
    2. 减轻类之间的耦合依赖,具体类的实现只是依赖于简单工厂,而不依赖其他类。
  2. 简单工厂的缺点:
    1. 扩展复杂,当简单工厂需要生产出另外一种产品的时候,需要扩展工厂的内部创建逻辑,比较有可能引起较大的故障
    2. 由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中

**工厂方法:**是定义一个创建对象的接口,让实现这个接口的的类去决定实例化具体的类。工厂方法让类的实例化推迟到实现接口的子类中进行。

**抽象工厂模式:**提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类,生产多个系列产品;生产不同产品族的全部产品,不能新增产品,可以新增产品族;
区别:

  • 简单工厂:唯一工厂类,一个产品抽象类,工厂类的创建方法依据入参判断并创建具体产品对象。
  • 工厂方法:多个工厂类,一个产品抽象类,利用多态创建不同的产品对象,避免了大量的if-else判断。
  • 抽象工厂:多个工厂类,多个产品抽象类,产品子类分组,同一个工厂实现类创建同组中的不同产品,减少了工厂子类的数量。

注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!

注:此博客只是为了记忆相关知识点,大部分为网络上的文章,在此向各个文章的作者表示感谢!

http://www.lryc.cn/news/543346.html

相关文章:

  • 机器学习3-聚类
  • html中的css
  • 36. Spring Boot 2.1.3.RELEASE 中实现监控信息可视化并添加邮件报警功能
  • Linux: 已占用接口
  • Vscode的通义灵码占用空间过大问题【.lingma】
  • 鸿蒙Next如何自定义标签页
  • 知识拓展:Python 接口实现方式对比:Protocol vs @implementer
  • 开源程序wordpress在海外品牌推广中的重要作用
  • 【Python爬虫(89)】爬虫“反水”:助力数字版权保护的逆向之旅
  • k8s面试题总结(五)
  • 文章精读篇——用于遥感小样本语义分割的可学习Prompt
  • Spring Boot2.0之十 使用自定义注解、Json序列化器实现自动转换字典类型字段
  • 从电子管到量子计算:计算机技术的未来趋势
  • 将CUBE或3DL LUT转换为PNG图像
  • python文件的基本操作,文件读写
  • 华为认证考试证书下载步骤(纸质+电子版)
  • 正式页面开发-登录注册页面
  • nss刷题5(misc)
  • 深入Linux序列:进程的终止与等待
  • 蓝桥杯之日期问题2
  • 【STL】7.STL常用算法(1)
  • uniapp 本地数据库多端适配实例(根据运行环境自动选择适配器)
  • 百度觉醒,李彦宏渴望光荣
  • 【算法工程】大模型局限性新发现之解决能连github但无法clone项目的问题
  • SOME/IP-SD -- 协议英文原文讲解3
  • 软件测试八股文,软件测试常见面试合集【附答案】
  • 数据结构秘籍(一)线性数据结构
  • TFChat:腾讯大模型知识引擎(DeepSeek R1)+飞书机器人实现AI智能助手
  • 使用消息队列怎样防止消息重复?
  • MySQL安装多版本与版本切换