23 种设计模式(GoF)代码示例说明

发布时间:2026/9/21 14:40:59

23 种设计模式(GoF)代码示例说明 本项目在com.example.design包下实现了 GoF 经典 23 种设计模式每个模式一个独立包每个包内含一个可独立运行的XxxDemo.java带main方法代码中均有详细注释。运行方式直接在 IDEA 中运行任意 Demo 类的main方法即可。设计模式的六大原则是什么 答 单一职责 开闭原则最重要 里氏替换 依赖倒置 接口隔离 迪米特法则目录一、创建型模式5 种1. 单例模式Singleton2. 工厂方法模式Factory Method3. 抽象工厂模式Abstract Factory4. 建造者模式Builder5. 原型模式Prototype二、结构型模式7 种6. 适配器模式Adapter7. 桥接模式Bridge8. 组合模式Composite9. 装饰器模式Decorator10. 外观模式Facade11. 享元模式Flyweight12. 代理模式Proxy三、行为型模式11 种13. 责任链模式Chain of Responsibility14. 命令模式Command15. 解释器模式Interpreter16. 迭代器模式Iterator17. 中介者模式Mediator18. 备忘录模式Memento19. 观察者模式Observer20. 状态模式State21. 策略模式Strategy22. 模板方法模式Template Method23. 访问者模式Visitor模式选择速查代码说明一、创建型模式5 种—— 关注对象怎么创建1. 单例模式Singletonsingleton定义保证一个类仅有一个实例并提供一个访问它的全局访问点。示例实现静态内部类懒加载 线程安全、双重检查锁DCL、枚举推荐防反射/序列化破坏。使用场景配置中心、连接池、线程池、缓存、Spring 容器的默认 Bean 作用域。2. 工厂方法模式Factory Methodfactorymethod定义定义一个创建对象的接口让子类决定实例化哪一个类将实例化延迟到子类。示例实现文档导出器CSV / PDF 工厂各自生产对应导出器。使用场景日志框架LoggerFactory、Spring 的 FactoryBean、支付渠道扩展。新增产品只需新增工厂符合开闭原则。3. 抽象工厂模式Abstract Factoryabstractfactory定义提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。与工厂方法的区别工厂方法生产一种产品抽象工厂生产一族产品。示例实现跨平台 UI 库Windows / Mac 工厂分别生产整套风格组件。使用场景跨平台 UI、数据库方言切换、多云厂商 SDK 适配。4. 建造者模式Builderbuilder定义将复杂对象的构建与表示分离同样的构建过程可创建不同表示。示例实现组装电脑必选参数走构造器、可选参数链式设置产出不可变对象。使用场景参数多且有可选项的对象创建LombokBuilder、StringBuilder、OkHttp 的 Request.Builder。5. 原型模式Prototypeprototype定义用原型实例指定创建对象的种类通过拷贝原型创建新对象。示例实现报表模板克隆演示深拷贝与浅拷贝的区别。使用场景对象初始化成本高查库/读文件且需大量相似对象时Java 的Cloneable、Spring 的 prototype 作用域。二、结构型模式7 种—— 关注类与对象怎么组合6. 适配器模式Adapteradapter定义将一个类的接口转换成客户希望的另一个接口使原本不兼容的接口可以一起工作。示例实现新版日志接口通过适配器兼容老系统的日志调用。使用场景整合第三方 SDK、老系统改造SLF4J 桥接各日志实现、Spring MVC 的 HandlerAdapter。7. 桥接模式Bridgebridge定义将抽象部分与实现部分分离使它们都可以独立变化。示例实现消息类型普通/加急× 发送渠道短信/邮件两个维度独立扩展避免类爆炸M×N → MN。使用场景多维度正交变化的场景JDBC DriverManager、JVM 跨平台实现。8. 组合模式Compositecomposite定义将对象组合成树形结构表示部分-整体层次使单个对象和组合对象的使用具有一致性。示例实现公司组织架构部门可嵌套部门/员工统一接口计算人力成本。使用场景文件系统、菜单树、UI 控件树、组织架构。9. 装饰器模式Decoratordecorator定义动态地给对象添加额外职责比生成子类更灵活。示例实现咖啡订单动态叠加牛奶、糖、奶油等配料像套娃逐层包装。使用场景Java IO 体系BufferedInputStream包装FileInputStream、HttpServletRequestWrapper、缓存/日志增强。10. 外观模式Facadefacade定义为子系统中的一组接口提供统一的高层接口使子系统更易使用。示例实现一键下单外观类封装库存、支付、物流、通知四个子系统的协作。使用场景微服务网关、Service 门面层、SLF4J 日志门面降低客户端与子系统的耦合。11. 享元模式Flyweightflyweight定义运用共享技术有效支持大量细粒度对象。示例实现棋子对象共享颜色内部状态坐标由客户端传入外部状态享元池复用对象。使用场景字符串常量池、Integer缓存-128~127、线程池、大量相似对象的内存优化。12. 代理模式Proxyproxy定义为其他对象提供一种代理以控制对这个对象的访问。示例实现房屋中介代理卖房同时演示静态代理与 JDK 动态代理InvocationHandler。使用场景Spring AOP、MyBatis Mapper 代理、RPC 远程代理、懒加载虚拟代理、权限保护代理。三、行为型模式11 种—— 关注对象之间怎么交互与分工13. 责任链模式Chain of Responsibilitychainofresponsibility定义多个对象连成一条链请求沿链传递直到被处理发送者与接收者解耦。示例实现报销审批链主管(≤1000) → 经理(≤10000) → CEO。使用场景Servlet Filter 链、Spring Security 过滤器链、审批流、异常处理链。14. 命令模式Commandcommand定义将请求封装为对象支持请求参数化、排队、日志记录与撤销。示例实现遥控器控制电灯命令栈支持 undo。使用场景编辑器撤销/重做、任务队列Runnable即命令、事务回滚、宏命令。15. 解释器模式Interpreterinterpreter定义定义语言的文法表示并定义解释器来解释语言中的句子。示例实现逆波兰后缀表达式解析与计算构造抽象语法树AST。使用场景SQL 解析、正则、规则引擎、SpEL。复杂语法建议用 ANTLR 而非手写。16. 迭代器模式Iteratoriterator定义顺序访问聚合对象的元素而不暴露其内部表示。示例实现自定义书架实现Iterable/Iterator支持 for-each。使用场景Java 集合框架、数据库结果集遍历、自定义容器的统一遍历。17. 中介者模式Mediatormediator定义用中介对象封装一系列对象交互使各对象不必显式相互引用N:N → N:1:N。示例实现聊天室转发用户消息用户之间互不感知。使用场景聊天室、塔台调度、GUI 组件协作、MQ 消息总线。18. 备忘录模式Mementomemento定义不破坏封装性的前提下捕获并保存对象内部状态以便之后恢复。示例实现游戏角色存档/读档备忘录对外屏蔽内部状态。使用场景编辑器撤销、游戏存档、数据库快照与事务回滚。19. 观察者模式Observerobserver定义定义对象间一对多依赖一个对象状态改变时所有依赖者自动收到通知。示例实现公众号发布文章订阅者自动收到推送。使用场景GUI 事件、SpringApplicationEvent、消息订阅、MVVM 数据绑定。20. 状态模式Statestate定义允许对象在内部状态改变时改变它的行为对象看起来修改了它的类。示例实现自动售货机无币/有币状态状态对象自己驱动状态转换。使用场景订单状态机、工作流引擎、TCP 连接状态消除大量状态判断 if-else。与策略模式的区别状态转换由状态内部驱动相互感知策略由客户端选择互不知晓。21. 策略模式Strategystrategy定义定义一系列算法并封装使它们可互相替换算法变化独立于使用它的客户。示例实现购物车结算动态切换支付宝/微信/银行卡支付策略。使用场景Comparator、支付方式、路由/负载均衡策略消除 if-else符合开闭原则。22. 模板方法模式Template Methodtemplatemethod定义定义算法骨架把某些步骤延迟到子类实现子类不改变算法结构即可重定义特定步骤。示例实现数据导入流程骨架固定读取→校验→入库CSV/Excel 各自实现差异化步骤含钩子方法。使用场景JdbcTemplate、RestTemplate、Servletservice()、AQS。23. 访问者模式Visitorvisitor定义在不改变元素类的前提下定义作用于这些元素的新操作双重分派。示例实现对工程师/经理分别实现年终奖计算与 KPI 报表两个访问者。使用场景元素类型稳定但操作经常新增的场景编译器 AST、注解处理器ElementVisitor、报表导出。模式选择速查痛点考虑的模式全局唯一实例单例创建逻辑复杂/参数多工厂方法、抽象工厂、建造者创建成本高的相似对象原型接口不兼容适配器多维度独立扩展桥接树形结构统一处理组合动态增强功能装饰器、代理简化复杂子系统调用外观大量细粒度对象耗内存享元多级审批/过滤责任链撤销/重做、任务队列命令自定义 DSL/表达式解释器屏蔽集合内部结构遍历迭代器多对象网状耦合中介者状态保存与恢复备忘录状态变更广播通知观察者行为随状态变化状态算法可互换、消 if-else策略流程固定、步骤可变模板方法元素稳定、操作常增访问者代码说明在 com.example.design 包下生成了 GoF 23 种设计模式的完整代码示例每个模式一个独立包代码带详细中文注释均可独立运行含 main 方法创建型5singleton饿汉/DCL/静态内部类/枚举四种实现、factorymethod、abstractfactory、builder、prototype结构型7adapter、bridge、composite、decorator、facade、flyweight、proxy静态代理 JDK 动态代理行为型11chainofresponsibility、command、interpreter、iterator、mediator、memento、observer、state、strategy、templatemethod、visitor
延伸阅读

更多相关文章

2026/9/20 0:18:08

为什么精准灌溉能决定作物收成

为什么你家的地浇了水,作物还是长不好? 在西北干旱区种地的老张最近很困惑:明明装了滴灌带,水也没少用,可小麦还是倒伏、苹果优果率上不去。问题出在哪?其实,现代农业早已超越“有水就行”的阶段…

2026/9/20 0:18:08

Qt 通用pro配置

提供一个通用的Qt pro工程配置 #------------------------------------------------- # # PS:应将此配置放置在pro文件的最后, 否则可能会不起作用 # PS:示例中的 contains 可以替换为 equals, 行后面的 { 一定不要换行,否则不能识别 # # 以下配置为程序输出目录配…

2026/9/20 0:18:15

如何快速上手InvenTree:开源库存管理系统的完整入门指南

如何快速上手InvenTree:开源库存管理系统的完整入门指南 【免费下载链接】InvenTree Open Source Inventory Management System 项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree 想要告别Excel表格管理库存的混乱吗?InvenTree这款开…

2026/9/22 6:15:09

nfc功能怎么用:从入门到精通的性能优化实战

nfc功能怎么用:从入门到精通的性能优化实战 面试被问原理答不上来,是多数后端开发者的噩梦。尤其是涉及NFC这种硬件交互的场景,面试官一句“为什么你的NFC读取这么卡?”,很多人只能愣在原地。今天不讲虚的,直接拆解【nfc功能怎么用】背后的…

2026/9/22 6:15:09

艺术风格有哪些图解原理:3招解决配置卡顿

艺术风格有哪些图解原理:3招解决配置卡顿 配置环境就卡半天?别急,先别把锅甩给网速。 很多应届生刚接触计算机视觉项目,一上来就 pip install 一堆库,结果终端转圈半小时,代码跑起来更是卡成 PPT。…

2026/9/22 6:15:09

长谷部瞳实战指南:5步搞定市政公用项目数据分析最佳实践

长谷部瞳实战指南:5步搞定市政公用项目数据分析最佳实践 刚学会 Python 语法,对着屏幕发呆?代码能跑通,但一到真实工程现场就懵圈,不知道数据怎么接、指标怎么定?这种“手上有锤子,找不到钉子”的焦虑,我太懂了。别慌,今天咱们不聊虚的,直…

2026/9/22 6:15:09

ios10.3.2与4i对比选型

iOS 10.3.2 源码拆解:新手避坑指南 学会语法却不知怎么搭项目,这是无数 iOS 初学者最大的噩梦。你背下了 UIView 的每一个属性,却连一个能跑的 App 都构建不起来。这时候,深入理解底层机制,特别是像 iOS…

2026/9/22 6:10:09

3分钟搞懂小米8参数配置速查手册

3分钟搞懂小米8参数配置速查手册 看了一堆教程还是不会写项目?别慌,这不仅仅是代码的问题,更是底层逻辑没打通。很多人死记硬背API,却忽略了硬件与软件交互的“黑盒”机制。今天这份 速查手册 ,不教你怎么刷分,而是带你像拆机一样拆解小米8的…

2026/9/21 3:28:31

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/21 3:33:19

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/22 0:04:49

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点 官方文档几百页翻到头还是懵?面试问到 输电线路在线监测 的数据链路时,脑子一片空白?别慌,这种 高频面试题 我整理了10年,专门治各种“文档太长抓不住重点”的毛病。…

2026/9/22 0:04:49

中介房源管理系统重构避坑:3个关键步骤搞定API变更

中介房源管理系统重构避坑:3个关键步骤搞定API变更 版本升级后 API 全变了,这种痛只有真做过的人懂。 很多团队在接手老旧房产项目时,最崩溃的不是代码烂,而是底层框架升级后,原本熟悉的接口调用方式彻底失效。 这份 保姆级教程…

2026/9/22 0:04:49

3个坑点带你一文搞懂55gg小游戏源码

3个坑点带你一文搞懂55gg小游戏源码 盯着控制台满屏的红色报错,看着那一长串 StackTrace ,是不是脑子瞬间宕机?别急,这种时候最忌讳的就是盲目改代码。很多刚入行的前端同学,面对 55gg 小游戏这类轻量级 H5…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/21 18:32:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/21 10:29:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码