发布时间:2026/8/5 17:33:27
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/8/5 17:33:27

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

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

2026/8/5 17:33:27

Qt 通用pro配置

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

2026/8/5 17:33:27

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

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

2026/8/5 18:33:30

docker基础部署

作为一个前端开发者,其实对部署这块儿并没有太多的学习,只是我平时用的一些,能将我们的系统进行一个部署,所以这篇仅供参考。在进行docker部署的时候,下面常用的一些命令不止是docker命令哈,也会有一些常用…

2026/8/5 18:33:30

拒绝套路与隐形收费:在河南郑州网站建设领域如何找到真正懂你的优质合作伙伴

做了一回互联网行业的“老黄牛”,我在郑州这片热土上摸爬滚打也有些年头了。见过太多企业老板,拿着几十万甚至是上百万的预算去搞宣传、投流,最后回头一看,那 website(网站)简陋得像是二十年前的产物,打开速度慢如蜗牛,手机端适配更是一塌糊涂,连个像样的表单都填不了…

2026/8/5 18:33:30

AI 电动工艺陶瓷圣诞树挂件智能微型 MOSFET 完整选型方案

2026年,AI赋能电动工艺陶瓷圣诞树挂件,带来智能旋转、光效变幻、声光联动等新功能,对驱动电路提出严苛要求:超小尺寸、高效率、超低功耗。微碧半导体(VBsemi)基于先进的Trench及SGT工艺,为您提供…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/5 0:01:34

三升四,比成绩下滑更可怕的,是孩子开始「认命」

分水岭上,最难的不是翻过去,是孩子不想翻了。八月初了。这两个字,对三升四的家长来说,比任何闹钟都让人清醒。最近的家长群里,气氛明显不一样了。一升二的在关心兴趣班,二升三的在讨论要不要提前学英语。而…

2026/8/5 0:01:34

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:01:34

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/3 22:40:58

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/3 13:26:41

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/3 16:43:13

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…