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

发布时间:2026/11/13 22:37:23

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/11/12 15:48:25

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

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

2026/11/12 18:41:35

Qt 通用pro配置

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

2026/11/9 4:14:43

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

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

2026/11/13 22:34:28

上海长宁区考电工证千万别踩坑 工地太忙根本没时间复习考试

上海长宁区考电工证千万别踩坑 工地太忙根本没时间复习考试 工地太忙根本没时间复习考试?你不是一个人。很多人在一线干着最苦最累的活,却因为没时间、没精力去准备电工证考试,结果被单位或项目方“卡脖子”,甚至面临停工、罚款、换岗等现实压力。在…

2026/11/13 22:34:28

齐河电工证培训机构在哪考靠谱?避开中介陷阱的实战指南

齐河电工证培训机构在哪考靠谱?避开中介陷阱的实战指南 你是不是也在犹豫, 不知道去哪报名怕被中介坑 ?现在电工证越来越重要,但网上一搜“齐河电工证培训机构在哪考”,信息五花八门,真假难辨,一不小心就掉进陷阱。别急,本文就从实战角度出发,帮你…

2026/11/13 22:34:28

电工证在手机上怎么考 全国通用的报考指南

电工证在手机上怎么考 全国通用的报考指南 你是不是正盯着手机屏幕,琢磨着“ 电工证在手机上怎么考 ”,却又担心自己会被那些乱收费的中介坑了?别急,这篇文章是给南阳初次报考的你量身打造的,手把手教你从零开始, 全国通用…

2026/11/13 22:34:28

煤矿特种工实操试题怎么准备才能稳过?含金量决定你的职业发展

煤矿特种工实操试题怎么准备才能稳过?含金量决定你的职业发展 实操考试心里没底怕挂科,这是很多煤矿特种工在备考时最真实的感受。尤其是对郑州金水区的应届工程类毕业生来说,首次接触煤矿特种作业操作证考试,面对煤矿特种工实操试题,更是充满了忐忑与不…

2026/11/13 22:29:26

退役特种兵去当维修工证全国通用吗内部消息揭秘

退役特种兵去当维修工证全国通用吗内部消息揭秘 证书过期了不知道怎么复审延期,这事儿我见得太多了。昨天刚帮一个战友处理完电工证延期的事,他从部队转业后做维修工,结果证书快到期了,连流程都不太清楚。 内部消息…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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