【面试题-5】设计模式

(1)设计模式的七大原则

单一职责(SRP):一个类只做一件事;

开闭(OCP):代码对扩展开发,对修改关闭;

里氏代换(LSP):能用父类,就能用子类;

依赖倒转(DIP):高层不依赖底层,依赖抽象。抽象不依赖细节,细节依赖抽象;

接口隔离(ISP):接口尽可能原子性,对象不能实现那些它不需要的接口;

合成复用(CRP):尽量用组合,而不是继承;

迪米特(LoD):模块间尽可能少的直接沟通,最少交流原则;

参看博客:【设计模式-1】UML和设计原则


(2)创建型

单例:某个类只能有一个实例。饿汉、懒汉、IoDH、双重检查锁定;

工厂:用实现接口的方式实例化对象;

抽象工厂:多维度的,用接口的方式实例化对象;

原型:使用 clone() 方法创建对象,避免重复创建。深拷贝和浅拷贝、序列化方式实现深拷贝;

建造者:需要在实例化对象的同时做某些事,可在实例化对象时执行某些方法;


(3)结构型

外观:整合不同对象的方法,使对象能提供高度集成的方法;

适配器:实现接口,实现适配,Feign 中的服务降级;

享元:同享对象,提高复用性,String 常量池,Integer 常量池;

代理:控制对对象的访问,静态代理,动态代理;

装饰器:多层装饰和嵌套,创建出更高性能的对象,Java 中的 IO 流;

桥接:多维度的对象进行连接,使用双接口 + 抽象类的方式连接;

组合:整体等于个体合并,文件系统场景,文件和文件夹;


(4)行为型

策略:根据不同场景获取不同实现类执行,一个业务多个场景的情况,如登录;

观察者:消息源头维护消息下游对象,来消息时,主动通知消息下游,商店进货场景,生产者/消费者场景;

责任链:对象内注入自身,设置为下级,构建一个链式处理流程,踢皮球场景。

模板方法:定义抽象方法并组合,制成模板;

迭代器:实现 Iterable 接口,实现访问集合的方式,Java 中的集合;

状态:抽离状态,让状态的改变在实现类中实现,交通信号灯场景;

备忘录:需要保存历史记录,编辑器场景;

中介者:定义中间层,减少对象的直接访问,符合迪米特原则,聊天室场景;

命令:实现命令和执行的解耦;

访问者:用于数据与操作分开的场景,在对象中定义访问方法,将数据主动出示给访问者;

解释器:定义一个接口,多个子类逻辑,用于解释一个式子,正则表达式;


以上参看博客:【设计模式-5】设计模式的总结

相关推荐
折哥的程序人生 · 物流技术专研22 分钟前
《Java 100 天进阶之路》第50篇:阻塞队列与并发容器(2026版)
java·面试题·java进阶·blockingqueue·并发容器·集合源码·java100天进阶
ai_coder_ai39 分钟前
编写自动化脚本,在自己后端服务中使用Open Api进行设备相关操作
java·运维·自动化
大圣编程1 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
yuhaiqiang1 小时前
随手 vibecoding 的浏览器插件已经 6000 多次下载,聊聊他的产品设计
前端·后端·面试
硕风和炜1 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集
upgrador1 小时前
基础知识:C++ STL构造函数的左闭右开惯例及其实现原理
开发语言·c++
格子软件1 小时前
2026年GEO贴牌代理:分布式多级分账状态机源码深度解构
java·vue.js·分布式·vue·geo
我是一颗柠檬2 小时前
【Java项目技术亮点】加权轮询负载均衡算法
java·算法·负载均衡
灯厂码农2 小时前
C语言动态内存分配完全指南(malloc、calloc、realloc、free)
java·c语言·算法
yoothey2 小时前
报废审批流规则引擎设计——责任链模式完整实现
linux·开发语言·bash