设计模式
文章平均质量分 87
安得小学僧-设计模式之美
致力于研究设计模式的一个资深程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
桥梁模式详解:郑开源的架构之旅
摘要:本文讲述了Java开发工程师郑开源如何应用桥梁模式(Bridge Pattern)解决消息推送系统设计问题。文章展示了传统继承方式导致的类爆炸问题,以及通过桥梁模式将消息类型(抽象部分)与推送渠道(实现部分)分离的重构方案。重构后的代码实现了灵活组合不同类型消息和推送渠道的能力,同时便于扩展。文章还介绍了Spring框架中桥梁模式的应用,如JdbcTemplate与DataSource的关系。该模式有效解决了抽象与实现之间的紧耦合问题。原创 2025-07-20 05:45:09 · 665 阅读 · 0 评论 -
门面模式详解:郑开源的架构优化之旅
本文通过一个电商系统的开发案例,阐述了门面模式(Facade Pattern)的应用价值。故事讲述了新手程序员郑开源面对复杂系统调用时的困惑,在架构师指导下将多个服务调用封装成一个统一的OrderFacade门面类。该门面类对外提供简洁的createOrder接口,隐藏了内部库存检查、支付处理、物流创建等复杂逻辑,显著简化了调用方代码,同时统一处理异常和事务回滚。这种设计模式不仅提升了代码可维护性,还降低了系统间的耦合度,体现了"最少知识原则"的设计思想。原创 2025-07-20 05:41:47 · 711 阅读 · 0 评论 -
责任链模式:郑开源的代码重构之路
摘要: Java开发工程师郑开源重构了一个耦合度高的员工请假审批系统。原系统将所有审批逻辑集中在一个方法中,违反了开闭原则。郑开源采用责任链模式,将每个审批级别(主管、经理、总监等)抽象为独立的处理者类,通过链式调用来实现逐级审批。这种设计解耦了请求发送者和接收者,使系统更易扩展和维护。重构后的代码通过构建审批责任链,实现了灵活的请假审批流程,每个处理者只需关注自己的审批范围,体现了单一职责原则。原创 2025-07-20 05:38:37 · 844 阅读 · 0 评论 -
状态模式:郑开源的编程奇遇记
本文通过程序员郑开源开发订单系统的案例,生动展示了状态模式的应用过程。起初使用if-else判断状态导致代码臃肿,后通过将每个状态抽象为独立类,实现状态与行为的解耦。文章详细介绍了状态接口设计、上下文类实现,并展示了待支付、已支付等具体状态类的编写。最后引入Spring框架,利用依赖注入管理状态对象,使状态切换更加优雅。这种设计模式有效解决了复杂状态流转问题,提高了代码的可扩展性和可维护性。原创 2025-07-20 05:35:55 · 705 阅读 · 0 评论 -
郑开源的遍历之旅-迭代器模式
本文通过程序员郑开源的日常工作场景,生动讲解了迭代器模式的设计与实现。文章首先描述了郑开源在处理不同数据结构(ArrayList、LinkedList、HashMap等)时遇到的遍历方式不统一的问题,随后通过技术总监老王的指导,引出迭代器模式的解决方案。文章详细阐述了迭代器模式的核心思想(封装遍历逻辑、统一接口、隐藏内部结构),并通过代码示例展示了如何自定义实现一个书籍收藏系统的迭代器(包含hasNext()、next()、remove()等方法)。该模式使客户端代码能以统一方式遍历不同数据结构,而不需关心原创 2025-07-15 08:40:45 · 393 阅读 · 0 评论 -
郑开源的语言解析之旅-解释器模式
摘要: 本文以开发者郑开源遇到的表达式解析需求为引,介绍了如何使用解释器模式优雅解决语言解析问题。通过构建抽象表达式接口(Expression)和具体实现类(如加减乘除表达式),配合上下文类(Context)和表达式解析器(ExpressionParser),实现了从简单计算器到支持变量、自定义函数的复杂表达式引擎。解释器模式将文法规则表示为对象层次结构,通过递归解释方式处理语言解析,避免了传统if-else的复杂性,提升了代码可扩展性和可维护性。文中提供了完整的Java代码示例,展示了如何解析包含数字、变原创 2025-07-15 08:35:30 · 466 阅读 · 0 评论 -
郑开源的克隆奇遇记-原型模式
这篇技术文章讲述了Java开发工程师郑开源如何通过原型模式(Prototype Pattern)解决商品对象创建性能问题的故事。文章摘要如下: 郑开源在电商系统开发中遇到商品对象创建耗时过长的问题,传统方式创建100个商品需要15秒。通过引入原型模式,他实现了商品对象的克隆复制机制,避免重复复杂的初始化过程。关键改进包括:1)让Product类实现Cloneable接口;2)重写clone方法实现深拷贝;3)相关支持类也实现克隆功能。原型模式的核心思想是通过复制现有对象而非重新构造来创建新对象,显著提升性能原创 2025-07-15 08:32:49 · 395 阅读 · 0 评论 -
模板方法模式与工厂方法模式配合使用详解
《设计模式结合应用:模板方法与工厂模式的实践》 本文通过电商系统订单处理案例,展示了模板方法模式与工厂方法模式的协同应用。作者首先描述了开发人员郑开源面临的重复代码问题,通过分析订单处理流程共性,引入模板方法模式重构代码结构。文章详细介绍了如何将固定流程定义在抽象父类中,而将可变部分交由子类实现,并通过Java代码示例展示了普通订单、VIP订单和团购订单的具体实现。这种模式组合在Spring等框架中广泛应用,既能保证流程一致性,又能灵活处理业务差异,有效解决了代码重复和扩展性问题。原创 2025-07-12 10:33:54 · 392 阅读 · 0 评论 -
郑开源的架构进化之路-责任链模式与装饰器模式的完美结合
《责任链与装饰器模式的协同应用》摘要:本文讲述了Java开发工程师郑开源如何优化电商订单处理系统。面对多重校验逻辑导致的代码臃肿问题,他首先采用责任链模式将订单处理拆分为库存检查、价格计算等独立处理器,实现了松耦合和扩展性。随后为满足日志、缓存等新需求,又引入装饰器模式在不修改原有处理器的基础上动态添加功能。这两种模式的结合运用,使系统既保持了处理流程的清晰结构,又具备了灵活的功能扩展能力,展示了设计模式在实际开发中的强大威力。原创 2025-07-12 10:29:29 · 405 阅读 · 0 评论 -
郑开源的架构师成长之路-装饰器模式与适配器模式的完美配合
《装饰器模式与适配器模式的协同应用:支付系统重构实践》 本文通过郑开源架构师重构支付系统的案例,展示了装饰器模式与适配器模式的协同应用。面对支付系统代码重复、耦合度高、扩展困难等问题,郑开源采用双模式组合方案:首先使用适配器模式统一不同支付渠道的接口差异(如支付宝、微信等),然后通过装饰器模式动态添加日志、监控等辅助功能。这种架构设计实现了支付核心逻辑与辅助功能的解耦,提供了灵活的系统扩展能力。文章详细展示了两种模式的代码实现,包括统一支付接口设计、具体适配器实现以及装饰器链式封装,为复杂业务系统的架构设计原创 2025-07-12 10:19:51 · 457 阅读 · 0 评论 -
郑开源的架构优化之旅-原型模式与享元模式的完美配合
摘要:郑开源在电商系统优化中面临大量相似商品对象创建的高成本问题。他首先采用原型模式(ProductPrototype),通过克隆已有对象减少复杂初始化过程,使创建速度提升70%。但发现内存使用仍高,因同类商品共享数据(如价格策略、营销配置)被重复存储。于是引入享元模式(ProductFlyweight),将可共享数据(内部状态)与独有数据(外部状态)分离,通过享元工厂(ProductFlyweightFactory)管理共享实例。两种模式结合既提升了对象创建效率,又显著降低了内存消耗,实现了性能与资源的双原创 2025-07-12 10:16:16 · 441 阅读 · 0 评论 -
郑开源的编程进阶之路-模板方法模式与钩子方法详解
文章摘要:本文通过Java工程师郑开源开发电商订单系统的故事,生动讲解了模板方法模式与钩子方法的应用。郑开源最初采用重复代码处理不同订单类型,随后通过抽象模板类定义算法骨架(模板方法),将可变步骤设为抽象方法,通用逻辑设为具体方法。面对新需求时,他引入钩子方法(可选步骤)来扩展灵活性。最终代码实现了高复用性和可扩展性,展示了设计模式解决实际问题的价值。原创 2025-07-12 10:13:42 · 425 阅读 · 0 评论 -
郑开源的架构之旅-观察者模式与中介者模式的完美配合
**摘要:**资深Java开发工程师郑开源在构建智能办公系统时,遇到了子系统间高耦合的问题。为解决此问题,他引入观察者模式重构架构:将考勤、会议室预订等子系统解耦为事件发布者(Subject)和观察者(Observer),通过事件机制实现松耦合交互。郑开源用微信群聊比喻观察者模式原理,并展示了具体实现代码,包括事件定义、观察者接口及Spring框架的事件机制应用。该设计显著提升了系统的可维护性和扩展性,为复杂系统交互提供了优雅的解决方案。原创 2025-07-12 10:08:01 · 471 阅读 · 0 评论 -
郑开源的代码重构之旅-访问者模式与组合模式的完美配合
Java开发工程师郑开源在重构文档管理系统时,面临代码结构混乱的问题:原有设计采用多重if-else判断处理不同类型文档的各种操作,违反了开闭原则。他首先运用组合模式将文档节点组织成树形结构,统一处理单个对象和组合对象,解决了树形结构问题。但随着新功能需求不断增加,组合模式暴露出局限性——每新增一个操作都需要修改所有子类。于是郑开源引入访问者模式,将数据结构与操作分离,通过访问者接口封装各类文档的处理逻辑,实现了在不修改现有类结构的情况下扩展新操作的能力。原创 2025-07-12 10:02:45 · 416 阅读 · 0 评论 -
博物馆的奇妙之旅-访问者模式
访问者模式是一种行为设计模式,它将数据结构与数据操作分离,通过访问者封装不同的操作逻辑。以博物馆为例,不同类型访客(艺术爱好者、历史学家、科学家)对同一展品(艺术品、文物、科学仪器)的关注点不同。访问者模式通过定义展品接口和访问者接口,让每种展品接受访问者,而不同访问者对各类展品实现不同的处理逻辑。这种设计避免了展品类因不同访客需求而变得臃肿,提高了代码的可扩展性,在不修改对象结构的情况下就能添加新的操作。原创 2025-07-12 09:57:48 · 1167 阅读 · 0 评论 -
小明的文本编辑器之旅-命令模式与备忘录模式配合使用详解
本文将命令模式与备忘录模式结合应用于文本编辑器开发。首先通过简单的文本操作(写入/删除)引入需求,随后使用命令模式封装操作命令,实现撤销/重做功能。随着需求扩展,引入备忘录模式保存文档快照,支持版本回溯和状态恢复。最终通过EditorManager结合两种模式,使编辑器同时支持操作历史记录和版本快照管理。这种设计模式组合为复杂编辑器功能提供了灵活可扩展的解决方案。原创 2025-07-12 09:54:07 · 373 阅读 · 0 评论 -
从餐厅点菜到企业级应用-命令模式与组合模式的完美配合
本文通过小明餐厅的案例,生动展示了命令模式和组合模式的协同应用。最初餐厅的点菜系统存在代码臃肿、难以扩展等问题,引入命令模式后,将每个菜品制作封装为独立命令对象,实现了操作的封装、撤销和扩展。随着业务发展,通过组合模式将多个命令组合成复合命令(如套餐),解决了复杂订单的管理问题。案例还展示了这两种模式如何应对定时订单、优先级处理等更复杂场景,体现了设计模式在实际业务中的灵活运用价值。原创 2025-07-12 09:50:24 · 334 阅读 · 0 评论 -
从餐厅点餐到Spring框架的设计之旅-命令模式
命令模式:餐厅订单系统的设计智慧 命令模式是一种将请求封装为独立对象的行为设计模式,如同餐厅将顾客点餐封装成标准化订单。该模式包含四个核心组件:命令接口(定义操作标准)、具体命令(实现订单细节)、调用者(服务员接收和执行订单)和接收者(厨房执行具体操作)。通过订单对象,系统实现了请求与执行的解耦,支持操作队列、撤销和历史记录等功能。本文以餐厅运营为例,生动展示了从传统紧耦合方式到命令模式优化的完整演变过程,体现了该模式在增强系统灵活性和可扩展性方面的优势。原创 2025-07-12 09:46:40 · 268 阅读 · 0 评论 -
一个厨师的故事-模板方法模式
摘要:模板方法模式是一种行为设计模式,通过定义算法骨架并允许子类重写特定步骤来实现代码复用。本文以连锁餐厅运营为例,展示了如何用抽象类定义统一的运营流程(准备食材、烹饪、装盘、服务),而将烹饪和装盘等差异化步骤交给具体子类实现。中餐、西餐和日餐三种餐厅通过继承抽象餐厅类,实现了统一流程下的差异化经营。该模式的核心优势在于既保证了流程一致性,又提供了足够的灵活性,有效减少了重复代码,提高了系统的可维护性和扩展性。原创 2025-07-12 09:40:11 · 386 阅读 · 0 评论 -
从生活中的代理到软件设计-代理模式
《代理模式:现实生活中的智能中介》 代理模式是一种结构型设计模式,通过引入代理对象来控制对真实对象的访问。就像现实中的快递代收点和公司安保系统,代理在真实对象前添加了一层间接访问机制,提供了访问控制、功能增强等优势。 文中通过两个生动案例阐释代理模式: 快递代收点作为代理,为小明提供包裹验证、存储和通知服务 公司安保系统作为多层代理,控制对CEO办公室的访问权限 代理模式包含三个核心角色:主题接口、真实主题和代理对象。常见代理类型包括保护代理(控制访问权限)和虚拟代理(延迟创建开销大的对象)。这种模式既能保原创 2025-07-12 09:33:19 · 390 阅读 · 0 评论 -
内存优化的艺术-享元模式
摘要:享元模式是一种结构型设计模式,用于高效处理大量细粒度对象的内存问题。以文字处理器开发为例,传统方式为每个字符创建独立对象导致内存浪费,而享元模式通过将字符属性分为内部状态(可共享的字体、颜色等)和外部状态(位置坐标等)来优化。核心实现包括享元接口、具体享元类、享元工厂和环境类,通过对象共享显著减少内存占用。文中展示了如何重构文字处理器代码,利用享元工厂管理格式对象,统计显示该方法能大幅降低内存使用率。原创 2025-07-11 01:59:32 · 476 阅读 · 0 评论 -
构建产品族的艺术-抽象工厂模式
摘要:本文介绍了如何使用抽象工厂模式设计跨平台游戏引擎。该模式通过创建PlatformFactory抽象工厂及其Windows、MacOS、Linux具体实现,统一管理各平台的UI组件、渲染器和音频系统(如DirectX/WinAPI/WASAPI、Metal/Cocoa/CoreAudio、OpenGL/GTK/ALSA)。文章详细展示了抽象产品和具体产品的代码实现,解决了跨平台开发中确保组件兼容性的问题,避免出现平台不匹配的组合。抽象工厂模式作为"工厂的工厂",能创建完整的产品族,区原创 2025-07-10 22:32:57 · 578 阅读 · 0 评论 -
构建树形结构的艺术-组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。让你能够以相同的方式处理简单对象和复杂对象(由简单对象组成的复合对象)。组合模式的核心智慧在于统一性。它让我们能够用相同的方式处理简单对象和复杂对象,大大简化了客户端代码的复杂度。从文件管理器的故事开始,我们看到了组合模式如何优雅地解决树形结构的处理问题。原创 2025-07-10 21:46:08 · 933 阅读 · 0 评论 -
当新旧系统需要和谐共处时-适配器模式
摘要:本文通过一个企业并购中的支付系统兼容性问题,介绍了适配器模式的应用场景。现代支付系统与传统银行系统在接口设计、参数格式和返回结果方面存在显著差异,直接整合难度大。通过构建银行系统适配器(BankSystemAdapter),实现了新旧系统间的参数转换和结果适配,在不修改原有系统的情况下完成对接。适配器模式在此场景中展现了其作为"转换器"的价值,为系统整合提供了高效、低风险的解决方案。(150字)原创 2025-07-07 21:10:37 · 1031 阅读 · 0 评论 -
再谈观察者模式:当报社遇上订阅者的故事
再谈观察者模式原创 2025-07-04 08:47:58 · 326 阅读 · 0 评论 -
责任链模式详解:一个审批流程的故事
责任链模式是一种用于处理请求的行为设计模式,让请求沿着处理链传递,每个处理者都能决定是否处理或传递给下一级。本文以公司费用审批系统为例,展示了如何实现该模式: 定义了审批请求类(ApprovalRequest)包含申请人、金额和用途 创建了审批者抽象类(Approver)和具体实现类(组长、经理、总监、CEO) 每个审批者根据金额权限处理请求,超出权限则转交上级 通过动态设置下一级审批者,构建完整的审批链 这种模式避免了大量if-else判断,使审批流程更灵活易扩展,符合单一职责原则。原创 2025-07-04 14:15:37 · 628 阅读 · 0 评论 -
如何写出可扩展的代码-策略模式+工厂模式
本文介绍了如何通过策略模式+工厂模式实现APP消息中心的多服务商动态切换。工厂类MessagePushStrategyFactory自动注入所有策略实现,通过平台类型获取对应策略。抽象接口MessageInfoStrategy定义了推送方法和平台标识,具体实现如BaiduStrategy和TpnsStrategy分别处理不同服务商的推送逻辑。该设计无需修改核心代码即可扩展新服务商,业务模块只需通过工厂获取策略实例即可完成消息推送。原创 2025-07-04 08:36:28 · 148 阅读 · 0 评论 -
观察者模式
观察者模式原创 2024-09-11 17:37:53 · 221 阅读 · 0 评论 -
今天谈一谈观察者模式 + 模板方法模式的组合使用
本文探讨了观察者模式与模板方法模式的组合应用。通过一个电商订单系统的案例,展示了如何从强耦合的代码逐步重构为解耦的设计:首先使用观察者模式将订单处理的各个功能拆分为独立的观察者类,实现松耦合的通知机制;然后引入模板方法模式,在抽象观察者中定义处理流程的骨架,将具体实现延迟到子类。这种组合既保持了系统的扩展性,又提高了代码复用性,解决了原始设计中职责过多、修改困难等问题,体现了设计模式组合应用的优雅与实用性。原创 2025-07-05 20:12:20 · 508 阅读 · 0 评论
分享