
设计模式
文章平均质量分 87
详解设计模式及其应用,包括经典23种设计模式和扩展设计模式,结合代码实例展示如何写出更优雅、更易维护的程序。
GawynKing
约定大于配置;配置大于设计;设计大于定制.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式之对象池模式
摘要:对象池是一种通过预创建和管理可复用对象来优化性能的设计模式,适用于数据库连接、线程等创建成本高的资源。其核心优势包括提升性能、降低GC压力、资源管控等,但也面临状态管理、泄漏风险等挑战。文章详细介绍了对象池的架构、实现示例(含Java代码),并与享元模式、单例模式进行了对比。对象池通过"空间换时间"的机制,在解决特定性能问题方面具有独特价值,但需谨慎处理对象状态重置和配置参数。原创 2025-07-15 15:50:03 · 926 阅读 · 0 评论 -
面向对象编程的基本原则
以上这些原则能够帮助开发者在项目中编写出更加模块化、灵活且易于维护的代码。在面向对象编程中,合理应用这些原则有助于提高代码质量,提升代码的可扩展性和稳定性。原创 2024-11-12 11:11:11 · 213 阅读 · 0 评论 -
设计模式之应用场景介绍
设计模式之应用场景介绍。原创 2024-11-10 23:49:19 · 961 阅读 · 0 评论 -
设计模式之单例模式
单例模式是一种创建型设计模式,确保一个类在应用程序的生命周期中仅有一个实例,并提供一个全局访问点。它通过私有构造函数、防止直接实例化,静态方法获取唯一实例,保证全局唯一性。单例模式常用于配置管理、日志记录、数据库连接池、线程池等需要共享资源的场景,具有减少资源浪费、确保状态一致性、简化全局访问等优点。特别是在多线程环境中,通过适当的同步机制,单例模式可以确保线程安全,避免实例重复创建的问题。原创 2024-07-20 21:08:14 · 625 阅读 · 0 评论 -
设计模式之工厂模式
工厂设计模式(Factory Pattern)是一种创建型设计模式,它帮助我们在不明确具体类的情况下创建对象。这个模式的主要动机是将对象的创建过程与其表示相分离,目的是使系统更具灵活性和可扩展性。在面向对象编程中,我们经常需要创建对象,这些对象可能来自不同的类,并且每个类的实例化过程可能会很复杂。如果我们在代码中直接使用这些类来创建对象,代码会变得难以维护和扩展。为了克服这些问题,工厂设计模式提供了一种解决方案,通过定义一个创建对象的接口,让子类决定实例化哪一个类,从而把对象的创建与使用分离开来。原创 2024-07-20 21:10:33 · 1120 阅读 · 0 评论 -
设计模式之原型模式
原型设计模式(Prototype Design Pattern)是一种创建型设计模式,其核心思想是通过复制(克隆)现有对象来创建新对象,而不是通过传统的实例化方式。这个模式在系统中需要创建大量相似对象时非常有用,可以避免反复创建同一类对象,并且在某些情况下还能提高性能。在原型模式中,对象实现一个原型接口,该接口规定了一个clone方法,用于返回对象自身的副本。这样,客户端就可以通过克隆的方式来创建对象,而不需要直接依赖具体类的构造函数。Prototype(原型接口):定义一个用于克隆自身的接口。原创 2024-08-08 21:02:35 · 965 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,旨在将对象的构造过程与其表示分离,使得同样的构建过程可以创建不同的对象。它通过分步构建复杂对象,允许对象的构建更加灵活且易于维护,特别是在需要创建具有多种不同配置的复杂对象时,使用建造者模式可以有效减少代码的复杂度和错误。建造者模式的核心思想是通过一个Builder对象来逐步构造最终的产品,而不是通过复杂的构造函数或者多参数初始化。每个构建步骤都相对独立,最终通过调用build()方法返回完整的对象。原创 2024-10-16 20:37:39 · 1019 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式为遍历集合中的元素提供了一种通用接口。其核心思想是,将集合的遍历逻辑与集合对象的实现分离。通过迭代器,客户端代码无需关心集合的底层实现方式(如数组、链表等),就能顺序地访问集合的每一个元素。迭代器设计模式提供了在不暴露对象内部结构的情况下,顺序访问对象集合的有效方法。通过分离集合的实现和遍历逻辑,迭代器模式不仅提高了代码的灵活性,还增强了代码的可维护性。在 Java 集合框架中,迭代器模式有着广泛的应用场景,它极大简化了集合的遍历操作,降低了代码复杂性。原创 2024-10-18 17:02:16 · 931 阅读 · 0 评论 -
设计模式之组合模式
组合设计模式(Composite Pattern)是一种结构型设计模式,它通过将对象组合成树形结构来表示“部分-整体”的层次结构,使客户端可以以统一的方式处理单个对象和组合对象。该模式允许客户端忽略对象组合和单个对象的差异,简化了复杂结构的操作。组合模式的核心在于树状结构,每个节点要么是叶子节点(即单个对象),要么是包含子节点的组合节点。无论节点是叶子还是组合,客户端都可以对它们执行相同的操作。组合模式特别适用于那些需要频繁操作对象集合和层次结构的场景,能够极大简化代码的复杂性。原创 2024-10-15 11:41:45 · 858 阅读 · 0 评论 -
设计模式之状态模式
状态设计模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态变化时改变其行为,对象看起来好像修改了它的类。换句话说,状态模式让一个对象在其状态改变时表现出不同的行为,这种模式通过将每个状态封装成一个类来实现。状态模式和策略模式很相似,也是将类的"状态"封装了起来,在执行动作时进行自动的转换,从而实现,类在不同状态下的同一动作显示出不同结果。它与策略模式的区别在于,这种转换是"自动","无意识"的。当一个对象的行为依赖于其状态,并且在运行时可以改变状态。原创 2024-10-23 19:19:48 · 478 阅读 · 0 评论 -
设计模式之代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,旨在为其他对象提供一种代理以控制对该对象的访问。它通过引入代理类来控制对目标对象的访问,代理对象与客户端进行交互,并根据具体需求对目标对象进行额外的功能扩展、权限控制、懒加载等。代理模式的核心思想是通过一个中介对象(代理对象)来替代直接访问目标对象,从而增强或改变目标对象的行为。@Override。原创 2024-11-06 19:16:36 · 1279 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录设计模式(Memento Pattern)是一种行为型设计模式,旨在允许对象在不暴露其内部状态的情况下保存和恢复其先前的状态。这种模式特别适合需要实现“撤销”操作的场景,如文本编辑器中的撤销功能、游戏中的状态保存等。备忘录模式主要有三个角色:发起人(Originator)、备忘录(Memento)和管理者(Caretaker)。发起人负责创建和恢复备忘录,备忘录则用于存储发起人的内部状态,而管理者负责管理备忘录对象的生命周期。需要保存对象状态以支持撤销和重做的系统。原创 2024-09-30 14:20:06 · 439 阅读 · 0 评论 -
设计模式之模板模式
模板设计模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤的实现延迟到子类中。通过使用模板方法,子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。模板设计模式通过定义算法骨架,并将具体步骤的实现延迟到子类中,提供了代码复用和灵活性。钩子方法的引入进一步增强了模式的灵活性,使子类可以选择性地覆盖某些步骤,甚至改变算法的执行流程。在实际开发中,模板设计模式非常适用于具有相似算法流程但部分实现细节需要自定义的场景。原创 2024-09-30 13:09:34 · 880 阅读 · 0 评论 -
设计模式之享元模式
享元设计模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享对象来有效地支持大量细粒度的对象。它的核心思想是尽量减少内存使用,尤其是在需要创建大量对象时,避免不必要的内存开销。可以理解为享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。享元模式下通常包含内部状态和外部状态概念,在使用时需要确保享元对象的内部状态是共享的,而外部状态是独立于对象的。内部状态:在享元对象中可以共享的状态,通常是不可变的。例如,字符的字体和样式。外部状态。原创 2024-09-30 12:04:22 · 920 阅读 · 0 评论 -
设计模式之装饰器模式
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变对象自身的情况下动态地为对象添加新的功能。装饰器模式通过将对象包装在另一个对象中来实现功能的扩展,既保持了类的封闭性,又提高了代码的灵活性。装饰器模式的核心思想是通过“对象包装”来为现有对象提供额外的行为,而不是通过继承或修改类来扩展功能。每个装饰器都实现了与被装饰对象相同的接口,并且可以在保持接口不变的情况下,向对象添加不同的职责。多个装饰器还可以层层嵌套,动态组合不同的行为。这种设计方式符合开闭原则(OCP)原创 2024-09-30 18:20:05 · 837 阅读 · 0 评论 -
设计模式之外观模式
外观设计模式通过提供一个高层接口,简化了复杂系统的使用,使得客户端代码更加简洁和易于维护。它隐藏了系统的复杂性,减少了子系统之间的耦合,并且可以通过引入新的外观类来适应系统的变化。外观模式在大型系统、编译器、多媒体处理和数据库操作等场景中非常有用。通过理解和应用外观模式,可以有效地提高软件系统的设计质量和可维护性。原创 2024-08-07 18:32:35 · 625 阅读 · 0 评论 -
设计模式之策略模式
// 私有构造函数防止外部实例化@Override@Override@Override通过策略模式,我们可以很容易实现登录用户本地缓存功能,同时如果我们想扩展缓存策略,也可以定义Redis缓存策略,只需要通过配置变更就可以让程序运行依赖新的缓存策略。策略模式通过将算法封装在独立的策略类中,使得算法的切换和扩展变得更加容易,符合面向对象设计的开闭原则。原创 2024-07-20 21:05:01 · 740 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,旨在将一个类的接口转换为客户端所期待的接口,使得原本由于接口不兼容而无法在一起工作的类能够协同工作。适配器模式的核心思想是“适配”,即通过创建一个适配器类,使得两个不兼容的类能够合作。适配器模式可以被比作生活中的电源适配器,不同国家的插座标准不同,电器设备无法直接使用,但通过适配器(比如从三脚插头转换为两脚插头),电器可以正常工作。软件开发中,适配器的作用类似,用于解决接口不兼容问题。原创 2024-09-29 10:49:09 · 1244 阅读 · 0 评论 -
设计模式之命令模式
命令模式通过将请求封装为对象来解耦请求的发送者和执行者,使代码更灵活、更具扩展性。它在需要对操作进行记录、撤销、重做以及支持事务操作时特别有用。然而,命令模式也会增加系统中类的数量,并且每一个具体的命令类都会导致代码的膨胀,因此在使用时需要权衡。原创 2024-07-20 21:13:48 · 723 阅读 · 0 评论 -
设计模式之过滤器模式
过滤器设计模式提供了一种方式来根据不同的条件标准对对象进行过滤处理。在该模式中,每一个条件(标准)被封装为一个单独的类,这些条件可以被单独使用,也可以组合使用(例如通过逻辑“与”、逻辑“或”等),从而灵活地筛选符合条件的对象集合。有大量对象集合,需要根据不同标准进行筛选。筛选条件是动态的或组合复杂度较高。希望筛选逻辑与对象本身的结构解耦,从而保持代码清晰、可扩展。过滤器设计模式通过将筛选条件封装成独立的标准类,解决了对象集合的多条件筛选问题。原创 2024-10-21 19:09:24 · 1036 阅读 · 0 评论 -
设计模式之责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,旨在将请求的发送者和接收者解耦,从而实现请求的动态处理。该模式将多个处理者(Handler)链接成一条链,并将请求沿着链传递,直到有一个处理者能够处理该请求为止。这样,每个处理者只需关注自己能处理的请求,而不必关心整个处理链的其他部分。适用场景当有多个对象可以处理一个请求,但并不确定哪个对象会处理该请求时。当希望在运行时动态地指定处理请求的对象时。原创 2024-08-01 19:07:55 · 344 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象和实现分离,来实现它们之间的独立变化。桥接模式主要是通过引入一个桥接接口,让抽象部分和实现部分可以分别独立扩展,从而实现灵活的功能组合和解耦。将抽象部分与实现部分分离,使得它们可以独立变化。通过使用桥接模式,可以避免在不需要改变抽象部分的情况下,修改具体实现。通过将实现部分抽象出来,桥接模式有效地将客户端和具体实现之间的耦合度降低。抽象类(Abstract):通常包含对实现类接口的引用,并定义抽象的方法。原创 2024-11-06 17:11:45 · 1111 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式是一种对象行为模式,定义了对象之间的“一对多”依赖关系。当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动更新。观察者模式是一个非常经典的事件驱动模型,广泛应用于各种需要事件通知机制的场景。主题(Subject):持有观察者列表并提供注册、注销观察者的功能。它在自身状态改变时会通知所有的观察者。观察者(Observer):负责接收主题的通知并根据变化做出反应。每个观察者都可以独立处理更新逻辑。原创 2024-11-05 20:52:46 · 499 阅读 · 0 评论 -
设计模式之中介者模式
中介者模式是一种行为型设计模式,它定义了一个中介对象,用于封装一组对象之间的交互。通过中介者,多个对象不再相互引用,而是通过中介者进行通信,从而达到降低耦合的目的。中介者模式的核心思想是将多个对象之间的复杂通信逻辑集中到一个中介者对象中,避免了对象之间的直接依赖关系,使对象的关系结构变得简单且可控。中介者设计模式通过引入一个中介者对象来简化对象之间的交互,降低了对象之间的耦合度。在复杂的系统中,它有效地减少了对象之间的依赖,使系统的扩展和维护更加容易。原创 2024-10-25 00:29:56 · 903 阅读 · 0 评论 -
设计模式之访问者模式
访问者模式(Visitor Pattern)是一种行为设计模式,它允许将一组算法与对象结构分离。访问者模式的核心思想是:将要执行的操作封装到不同的访问者对象中,访问者通过访问对象结构(如树或集合),对结构中的各类对象进行特定操作。这样,访问者模式能在不修改对象结构的情况下扩展新功能,实现开闭原则。Visitor(访问者):定义访问元素的接口,对每个具体元素类型定义访问操作。ConcreteVisitor(具体访问者):实现具体的访问操作,每个具体访问者负责处理某种逻辑操作,能够访问多种具体元素。原创 2024-11-10 23:03:56 · 1674 阅读 · 0 评论 -
设计模式之解释器模式
解释器设计模式(Interpreter Pattern)是一种行为型设计模式,主要用于解释执行某些特定的语言或表达式。通过定义一系列规则,解释器模式能够分析并执行这些规则,使得代码能理解并处理自定义的语法规则或语言。解释器模式广泛应用于文本解析、规则引擎、编程语言开发等领域。// 抽象表达式接口解释器设计模式在解析和执行特定语言或规则的领域内发挥了重要作用,特别适用于解析数学表达式、构建规则引擎、实现脚本解析等场景。原创 2024-11-07 12:29:07 · 940 阅读 · 0 评论 -
扩展模式之空对象模式
空对象模式是一种行为设计模式,旨在处理程序中可能为空的对象引用问题。通常情况下,当我们获取某个对象的引用时,如果该对象可能为空,常见的处理方式是对其进行null检查,确保程序不因空引用而抛出异常。然而,这种检查会使代码显得臃肿,不利于维护。空对象模式的解决方案是为可能为空的对象提供一个特殊的实现,该实现不执行任何操作或返回默认值,从而避免空检查。空对象设计模式通过提供一个特殊的空对象,减少了代码中反复的null检查操作。它在代码结构上增强了可读性和可维护性,也有效降低了代码复杂度。原创 2024-11-07 17:49:15 · 496 阅读 · 0 评论 -
扩展模式之生产者&消费者模式
生产者/消费者设计模式是一种用于多线程环境中的设计模式,它基于生产者和消费者的角色定义了一个共享资源池,生产者负责生产任务或数据,消费者负责消费这些任务或数据。通过将生产者和消费者解耦,它们之间的交互通过缓冲区(通常是队列)进行。生产者将数据放入队列中,消费者从队列中取出数据并处理。这种模式的关键是如何合理设计生产者和消费者的关系,确保资源池能够在适当的时间有效地供给或消费,避免资源的浪费或阻塞。Producer(生产者):负责产生任务或数据并将其放入缓冲区(队列)中。原创 2025-02-03 00:47:25 · 1303 阅读 · 0 评论 -
设计模式之上下文对象设计模式
上下文对象模式是一种用于多层架构中共享状态和服务的有效设计模式。该模式通过封装与特定作用域相关的数据和行为为Context对象,使各组件无需显式传递参数或依赖环境细节,从而提升系统的可复用性和可维护性。其核心价值在于解耦、集中管理和生命周期控制,典型应用包括SparkContext和Flink的执行环境。实现时包含Context接口、具体实现类和可选工厂类,适用于Web应用和微服务场景,可简化跨层数据传递。但需注意避免Context过度膨胀,必要时可结合IoC容器使用。该模式为现代分布式系统提供了重要的架构原创 2025-07-01 19:18:21 · 1082 阅读 · 0 评论 -
设计模式之回调模式
摘要:回调(Callback)是一种程序设计模式,实现"控制反转"思想,将代码作为参数传递执行。主要分为同步和异步两种形式:同步回调通过接口或函数式编程实现,包括Lambda表达式和方法引用;异步回调通过Future和CompletableFuture实现非阻塞处理。此外,Stream API也内置回调机制。不同回调方案在复杂度、线程模型、异常处理等方面各有特点,适用于不同场景。随着函数式编程的普及,Lambda和CompletableFuture已成为Java回调的主流实现方式,开发者原创 2025-07-15 12:30:04 · 776 阅读 · 0 评论