设计模式
文章平均质量分 74
设计模式又简单到复杂
蔡定努
人前拼实力,人后拼努力
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式——适配器模式
适配器模式是一种结构型设计模式,用于解决接口不兼容问题。它充当两个不兼容接口之间的桥梁,就像电源适配器转换电压一样。该模式包含目标接口、被适配者和适配器三个核心组件。适配器将被适配者的接口转换为目标接口,使原本不兼容的类能够协同工作。主要优点包括接口兼容、无需修改原有代码和解耦合,但也可能增加系统复杂度和性能开销。适用场景包括使用第三方库、统一不同接口和复用现有类等情况。使用时需权衡利弊,避免过度使用导致不必要的复杂度。原创 2026-01-31 16:44:25 · 552 阅读 · 0 评论 -
设计模式——迭代器模式
迭代器模式是一种行为型设计模式,它提供统一接口遍历集合对象,同时隐藏内部实现细节。该模式通过定义迭代器接口和可迭代接口,将集合遍历逻辑与集合本身解耦,使得客户端代码无需关心集合的具体实现。迭代器模式的优点包括统一遍历接口、隐藏内部结构、易于扩展集合类型等,适用于需要遍历各种集合的场景。Java集合框架是迭代器模式的典型应用,通过Iterator接口和Iterable接口实现集合的统一遍历。使用建议:当需要统一遍历不同集合或隐藏集合内部结构时采用迭代器模式,简单遍历可直接使用for循环。原创 2026-01-31 16:43:29 · 461 阅读 · 0 评论 -
设计模式——责任链模式
责任链模式是一种行为型设计模式,它将请求沿着处理者链传递,直到找到能处理该请求的对象。它解决了传统if-else代码臃肿、难以扩展的问题,实现发送者与接收者解耦。典型应用场景包括审批流程、异常处理和事件处理等。该模式通过动态组合处理者链,使系统更灵活可扩展。示例展示了请假审批流程中,不同层级的处理者如何按职责范围依次处理请求。原创 2026-01-30 10:00:10 · 635 阅读 · 0 评论 -
设计模式——访问者模式
访问者模式是一种行为型设计模式,它允许在不修改对象结构的情况下定义新操作。该模式通过将操作从对象结构中分离出来,解决了传统方式中违反开闭原则、代码臃肿和难以扩展的问题。典型结构包括Visitor接口、Element接口及其具体实现。示例展示了购物车场景,其中Visitor计算不同类型商品(图书、水果)的总价,而无需修改商品类本身。访问者模式的优势包括符合开闭原则、操作分离、易于扩展和集中管理相关操作,特别适合需要添加新操作但不想修改已有类结构的场景。原创 2026-01-27 15:12:30 · 452 阅读 · 0 评论 -
设计模式——解释器模式
解释器模式是一种行为型设计模式,用于定义语言的文法并解释其中的句子。它通过抽象表达式(Expression)接口和具体表达式类(终结符和非终结符)构建解析结构,将复杂语法分解为可管理的部分。该模式解决了传统if-else解析方式导致的代码臃肿、难以扩展和维护问题,使语法规则更清晰、扩展更容易。典型应用包括计算器、正则表达式和SQL解析器等场景。示例展示了如何使用该模式解析数学表达式,通过组合不同的表达式类(数字、加减乘)来构建复杂的表达式树并计算结果。原创 2026-01-26 10:01:08 · 501 阅读 · 0 评论 -
设计模式——观察者模式
*** 观察者接口/*** 更新* @param message 消息/*** 主题接口*//*** 添加观察者*//*** 移除观察者*//*** 通知所有观察者*//*** 具体主题:微信公众号*/@OverrideSystem.out.println(observer + " 订阅了 " + name);@OverrideSystem.out.println(observer + " 取消订阅了 " + name);原创 2026-01-26 09:57:11 · 569 阅读 · 0 评论 -
设计模式——装饰器模式
装饰器模式是一种动态扩展对象功能的设计模式,通过组合而非继承的方式为对象添加新功能。它解决了传统继承方式导致的类爆炸问题,使功能扩展更加灵活。装饰器模式包含组件接口、具体组件、装饰器基类和具体装饰器四个部分。以咖啡为例,基础咖啡可以动态添加牛奶、糖、奶油等装饰,每种装饰都会增加相应费用并修改描述,而无需创建大量子类。这种模式特别适合需要动态、灵活地组合功能的场景。原创 2026-01-25 16:36:50 · 492 阅读 · 0 评论 -
设计模式——组合模式
组合模式是一种结构型设计模式,用于将对象组织成树形结构,以表示"部分-整体"的层次关系。该模式允许客户端统一处理单个对象和组合对象,简化代码并提高扩展性。 核心特点: 统一接口:所有对象(叶子和组合)实现相同接口 递归组合:组合对象可以包含其他组合对象 透明性:客户端无需区分叶子与组合对象 典型应用: 文件系统(文件/文件夹) 组织架构(员工/部门) 图形界面(组件/容器) 优势:简化客户端代码、便于添加新组件类型、清晰表示层次结构 局限:设计较复杂、可能限制组件类型原创 2026-01-25 16:36:09 · 403 阅读 · 0 评论 -
设计模式——策略模式
策略模式是一种行为设计模式,允许定义可互换的算法族并封装每个算法。它通过将算法与使用它的上下文分离,解决了传统if-else结构导致的代码臃肿和难以扩展问题。该模式包含策略接口、具体策略实现和上下文类三部分,支持运行时动态切换算法。典型应用场景包括出行方式选择、支付方式和排序算法等。优点是提高代码可维护性和扩展性,缺点是可能增加类数量。策略模式适用于需要灵活切换算法的场景,但需注意避免过度使用导致系统复杂化。原创 2026-01-23 15:23:34 · 477 阅读 · 0 评论 -
设计模式——状态模式
状态模式是一种行为型设计模式,允许对象在不同状态下改变其行为。它通过将每个状态封装为独立类来避免大量if-else判断,使代码更清晰、易扩展。典型结构包括状态接口、具体状态类和上下文类。该模式适用于订单系统、游戏角色状态管理等场景,能有效分离状态逻辑,但会增加类数量。与策略模式不同,状态模式强调状态间的转换关系。使用时应权衡复杂度,对简单状态可直接使用条件判断。原创 2026-01-23 15:22:52 · 658 阅读 · 0 评论 -
设计模式——模板方法模式
模板方法模式是一种行为型设计模式,通过在父类中定义算法框架,将具体步骤的实现延迟到子类中。该模式解决了传统方式中代码重复、维护困难等问题,提供了代码复用、一致性保证和易于扩展等优势。典型应用场景包括做菜流程、Servlet生命周期、JDBC操作等。示例代码展示了抽象类定义模板方法、具体类实现细节的结构,并演示了如何通过继承实现不同菜品的制作流程。该模式适合需要固定流程但允许细节变化的场景,但需要注意继承带来的限制。原创 2026-01-22 16:51:41 · 420 阅读 · 0 评论 -
设计模式——桥接模式
摘要:桥接模式是一种解耦抽象与实现的结构型设计模式,使两者能独立变化。它通过组合代替继承,避免了类爆炸问题,如形状与颜色的组合只需分别定义而不需创建所有组合类。该模式包含抽象、扩展抽象、实现接口和具体实现四个角色,优势包括解耦合、独立变化和扩展容易,适用于多维度系统。典型应用场景包括UI框架、数据库驱动等。使用时需权衡复杂度,仅在多维度场景下采用。原创 2026-01-22 16:50:02 · 376 阅读 · 0 评论 -
设计模式——抽象工厂模式
抽象工厂模式摘要 抽象工厂模式是一种创建型设计模式,用于创建相关对象族而不指定具体类。它通过提供一个接口来创建多个相互关联的产品对象,确保产品族的兼容性。与工厂方法模式只能创建单一产品不同,抽象工厂模式能创建一组相关产品(如现代风格家具或古典风格家具)。其优势包括:保证产品族一致性、降低客户端与具体类的耦合、便于扩展新产品族。模式结构包含抽象工厂、具体工厂、抽象产品和具体产品四个主要部分,通过工厂生产者来获取合适的工厂实例。典型应用场景是需要创建一组相互关联的产品对象时。原创 2026-01-21 11:09:31 · 1103 阅读 · 0 评论 -
设计模式——建造者模式
建造者模式是一种创建型设计模式,它将复杂对象的构建过程分解为多个步骤,允许灵活组合不同配置。该模式解决了传统构造方法参数过多、顺序依赖等问题,提高了代码可读性和可维护性。通过定义产品类、Builder类和可选指挥者类,建造者模式实现了构建与表示的分离,使相同构建过程能创建不同对象。示例展示了如何用建造者模式配置不同电脑(如办公电脑和游戏电脑),通过链式调用方法设置可选参数,最终生成所需对象。这种模式特别适用于创建具有多个可选参数或配置变体的复杂对象。原创 2026-01-20 15:32:05 · 352 阅读 · 0 评论 -
设计模式——工厂方法模式
工厂方法模式是一种创建型设计模式,通过定义创建对象的接口,让子类决定实例化哪个类。它解决了传统new创建方式导致的耦合问题,使对象创建逻辑集中管理,易于扩展。模式包含抽象产品、具体产品、抽象工厂和具体工厂四个角色。示例展示了日志记录器的实现:定义Logger接口和多种具体记录器(Console/File/Database),通过对应的工厂类创建实例。客户端只需与抽象工厂交互,无需关心具体实现类,实现了解耦和灵活扩展。原创 2026-01-20 14:54:40 · 1474 阅读 · 0 评论 -
设计模式——外观模式
外观模式是一种结构型设计模式,为复杂子系统提供简化接口。它通过定义高层接口(Facade类)来封装多个子系统的交互,降低客户端与子系统的耦合度。外观模式的优势包括简化接口、解耦合和易于使用,常见于API封装、数据库访问等场景。代码示例展示了如何通过外观类统一调用多个子系统的方法,使客户端只需与外观类交互。虽然外观模式能简化系统使用,但需注意不要过度使用而增加不必要的复杂度,且外观类不应包含业务逻辑。适用场景包括复杂系统简化、分层设计等需求。原创 2026-01-19 22:55:51 · 486 阅读 · 0 评论 -
设计模式——备忘录模式
摘要:备忘录模式是一种行为型设计模式,允许在不破坏封装的前提下保存和恢复对象状态。它通过三个核心角色实现:Originator(发起人)负责创建和恢复状态,Memento(备忘录)存储状态,Caretaker(管理者)管理备忘录。该模式适用于需要撤销操作、保存历史状态的场景,如游戏存档、文档撤销和版本控制。优势在于保持封装性、支持撤销功能,但需注意内存消耗问题。实际应用中可与命令模式结合,实现更完整的撤销功能。原创 2026-01-19 22:55:14 · 597 阅读 · 0 评论 -
设计模式——命令模式
命令模式是一种行为型设计模式,将请求封装为对象,使请求可参数化、排队、记录和撤销。它通过解耦调用者与接收者(如遥控器与电器),提供灵活的操作控制。核心组件包括命令接口、具体命令、调用者和接收者。优势在于支持撤销/重做、操作记录和请求排队,适用于GUI操作、宏命令和事务处理等场景。但需注意类数量增加带来的复杂度,避免过度使用。典型实现如灯光控制示例所示,通过命令对象封装操作,实现灵活控制。原创 2026-01-19 09:51:15 · 350 阅读 · 0 评论 -
设计模式——原型模式
原型模式摘要 原型模式是一种通过复制现有对象来创建新对象的设计模式,避免了重复初始化对象的开销。它包含原型接口(定义克隆方法)和具体原型(实现克隆逻辑)。实现时需注意浅拷贝(只复制引用)和深拷贝(复制引用对象)的区别:浅拷贝可能导致对象共享问题,而深拷贝能确保对象完全独立。该模式适用于创建成本高或需要动态配置的对象场景,能有效提高性能并简化对象创建过程。原创 2026-01-19 09:50:40 · 1017 阅读 · 0 评论 -
设计模式——单例模式
单例模式确保类只有一个实例并提供全局访问点,常用于资源管理场景如数据库连接池、配置管理等。核心实现要点包括私有构造方法、私有静态实例和公共访问方法。推荐使用静态内部类实现方式,它具备线程安全、延迟加载和代码简洁等优点。其他常见实现有饿汉式、懒汉式和双重检查锁。该模式适用于需要全局唯一对象、资源密集或频繁访问的场景,能有效节省资源并保证数据一致性。原创 2026-01-17 22:53:32 · 663 阅读 · 0 评论 -
设计模式——代理模式
代理模式摘要 代理模式是一种结构型设计模式,通过创建代理对象来控制对目标对象的访问。它类似于生活中的经纪人、中介等角色,在客户端和目标对象之间充当中间人。代理模式的主要优势包括:控制访问权限、增强功能(如添加日志或缓存)、延迟加载资源等。常见代理类型有远程代理、虚拟代理和保护代理。虽然会增加系统复杂度,但代理模式在RPC调用、AOP编程、权限控制等场景中非常实用。使用时需权衡利弊,避免过度设计增加不必要的复杂性。原创 2026-01-17 22:48:58 · 416 阅读 · 0 评论 -
设计模式——享元模式
享元模式是一种结构型设计模式,通过共享相似对象来减少内存使用。它将对象状态分为内部状态(可共享)和外部状态(不可共享),通过享元工厂管理共享对象。典型应用包括游戏开发(共享角色/道具)、文字处理(共享字符)等。该模式能显著减少内存占用(如示例中10000棵树仅需少量对象),但会增加系统复杂度。适用场景为需要创建大量相似对象且内存敏感的情况,使用时需注意线程安全和状态分离问题。原创 2026-01-17 22:48:06 · 467 阅读 · 0 评论 -
设计模式——中介者模式
摘要:中介者模式是一种行为型设计模式,通过引入中介者对象来协调多个对象间的交互,降低耦合度。该模式适用于对象间交互复杂、耦合度高的场景,如聊天室、GUI组件通信等。主要优势包括解耦合、集中管理和易于扩展,但需注意中介者可能变得过于复杂。实现时需定义中介者接口、同事接口,并通过具体中介者(如聊天室)来协调具体同事(如用户)之间的通信。原创 2026-01-17 22:46:28 · 609 阅读 · 0 评论 -
模板方法模式 :深入理解设计模式
首先,我们创建一个名为的抽象类,它将作为我们冲泡饮品的模板。// 抽象类,定义准备饮料的算法骨架// 模板方法,定义了算法的骨架brew();// 具体步骤:烧水// 抽象步骤:冲泡// 具体步骤:倒入杯子// 抽象步骤:添加调料// 钩子方法,子类可以重写此方法来控制是否添加调料在这个抽象类中,方法就是我们的模板方法,它定义了冲泡饮品的整体流程。boilWater和pourInCup方法是所有饮品冲泡过程中都相同的具体步骤,因此在抽象类中直接实现。而brew和。原创 2025-04-17 17:21:44 · 994 阅读 · 0 评论 -
责任链模式:优雅处理请求的设计艺术
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求为止。在这个模式中,每个处理者都有一个引用指向下一个处理者,形成一个链条。当一个请求进入这个链条时,它会依次经过每个处理者,每个处理者可以选择处理该请求或者将其传递给下一个处理者。// 支持链式调用的设置下一个处理者的方法。原创 2025-03-16 01:02:19 · 636 阅读 · 0 评论
分享