23种设计模式
文章平均质量分 92
九转成圣
少年易老学难成,一寸光阴不可轻。未觉池塘春草梦,阶前梧叶已秋声。
展开
-
设计模式之单例模式
单例模式(Singleton)是一种创建型设计模式,确保一个类在系统中仅有一个实例,并提供全局访问点。适用于需要唯一实例、节省资源、全局访问点和状态共享的场景。实现方式包括双重检查锁定、静态内部类和枚举等,每种方式有其优缺点,如线程安全、实现复杂度和反射攻击防范等。实际应用中,如配置管理、日志记录和数据库连接池等场景,通过单例模式实现统一管理和资源节约。同时,需注意线程安全、序列化与反序列化、防反射攻击等问题,以保证单例模式的有效性和安全性。原创 2024-06-02 14:30:28 · 1071 阅读 · 1 评论 -
设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory)是一种创建型设计模式,提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式的主要角色包括抽象工厂、具体工厂、抽象产品和具体产品。抽象工厂声明创建产品的方法,具体工厂实现这些方法生成具体的产品实例。抽象产品定义产品的接口,具体产品实现这些接口。此模式适用于需要创建一系列相关对象且系统需要独立于这些对象的创建和表示的场景。在实际应用中,抽象工厂模式可以用于跨平台UI组件库的设计,确保不同平台的UI组件风格一致。例如,通过不同的具体工厂创建原创 2024-06-02 14:17:41 · 578 阅读 · 1 评论 -
解密中介者模式:简化复杂对象交互的设计利器
用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用。原创 2024-04-15 08:06:40 · 1721 阅读 · 0 评论 -
设计模式之状态模式
允许一个对象在其内部状态改变时改变它的行为。对象通过持有一个状态对象,并将行为委托给状态对象来实现这一点。当对象的状态改变时,它会改变其持有的状态对象,从而导致其行为发生变化。状态模式通过将状态和行为封装到独立的状态类中,解决了对象行为在不同状态下的变化问题,避免了大量的条件分支语句,提高了代码的可维护性和可扩展性。虽然状态模式会增加类的数量和设计复杂性,但它提供了一种清晰、可扩展的解决方案,使得系统在面对复杂状态转换时更加灵活和易于管理。原创 2024-04-15 08:06:14 · 1348 阅读 · 0 评论 -
设计模式之外观模式
外观模式通过引入一个高层接口,使得复杂系统中的多个子系统变得更容易使用。它为子系统提供了一个统一的入口,客户端通过外观类与系统交互,而无需直接与子系统打交道。这种模式的核心在于简化接口、解耦客户端与子系统、封装系统变化。外观模式是一种非常实用的结构型设计模式,通过引入一个高层接口,简化了复杂系统的使用方式,降低了客户端与子系统之间的耦合度,提高了系统的可维护性和扩展性。在实际开发中,合理地使用外观模式可以大大简化系统的设计和实现,使代码更加清晰、易懂和易于维护。原创 2024-04-11 08:31:49 · 1089 阅读 · 0 评论 -
设计模式之命令模式
命令模式在调用者和具体的执行者(接受者)之间加了一层(命令层)原创 2024-04-10 08:34:34 · 1584 阅读 · 0 评论 -
责任链模式:解耦请求与处理,打造灵活系统架构
责任链模式是一种行为设计模式,通过使多个对象都有机会处理请求,避免了请求发送者与接收者之间的直接耦合。它通过将请求沿着对象链传递,直到有对象处理它为止,实现了请求的动态处理。在实际开发中,责任链模式广泛应用于日志处理、异常处理和权限校验等场景,特别是在Spring框架中,通过HandlerAdapter、MessageListenerAdapter等机制,实现了对不同组件和接口的适配和解耦。责任链模式的主要优势在于降低耦合度、增强系统的灵活性和可扩展性,但需要注意链条过长可能带来的性能问题和调试难度。通过责原创 2024-04-09 08:20:58 · 1340 阅读 · 0 评论 -
设计模式之适配器模式
将一个类的接口转换成客户希望的另一个接口。原创 2024-04-03 09:03:07 · 1596 阅读 · 2 评论 -
享元模式详解:优化性能与内存管理的秘密武器
细粒度对象是指那些内存占用较小、创建开销较低的对象。它们通常代表数据单元或基本元素。在享元模式中,这些对象可以被高效地共享,以减少内存占用和提高系统性能。内部状态:对象可以共享的部分,通常是不会改变的,例如字符的字形、颜色等。外部状态:对象的非共享部分,由客户端维护,并在对象使用时传入,例如字符的位置、大小等。原创 2024-04-01 08:30:42 · 1714 阅读 · 0 评论 -
深入探讨代理模式:从静态代理到动态代理的全方位解析
代理模式是一种结构型设计模式,通过在访问真实对象时引入代理对象,能够有效控制对对象的访问,增加系统灵活性。本文详细解析了代理模式的定义及其五大使用场景,包括远程代理、虚拟代理、缓冲代理、保护代理和智能引用。我们通过类图和代码示例深入讲解了静态代理的实现,并进一步介绍了JDK动态代理和Cglib动态代理的使用方法,比较了两者的优缺点。通过本篇文章,读者将全面理解代理模式的应用场景及其在提升系统设计中的关键作用,从而编写出更优雅、高效的代码。原创 2024-03-26 07:55:04 · 1621 阅读 · 2 评论 -
设计模式之美:装饰者模式在灵活扩展中的魔力
装饰者模式是一种设计模式,能够在不修改原始对象代码的情况下,动态地为对象添加新功能,提供了比继承更加灵活的扩展方式。本文详细介绍了装饰者模式的定义、使用场景和主要角色,并通过具体的Java代码示例演示了如何实现和应用装饰者模式。特别地,本文分析了装饰者模式与代理模式的区别,阐明了各自的关注点和实现方式。最后,结合实际工作中的场景,如日志记录和性能监控,展示了装饰者模式在现代软件开发中的重要性和实用性,使读者能够直观理解其强大功能与灵活性。原创 2024-03-26 07:54:16 · 2137 阅读 · 0 评论 -
设计模式之组合模式
将对象组合成树形结构以表示“部分-整体”的层次结构。原创 2024-03-05 15:18:37 · 1928 阅读 · 0 评论 -
设计模式之单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。该模式通过限制类的实例化来控制资源的使用,确保系统中只有一个类的实例存在。单例模式在许多场景下非常有用,特别是在需要共享资源或控制实例数量的情况下。单例模式是一种简单而有效的设计模式,用于确保某个类在整个系统中只有一个实例。虽然有多种实现方式,但每种方式都有其优点和缺点,开发者应根据具体的使用场景选择合适的实现方式。在实际应用中,常用的单例模式实现包括双重检查锁、静态内部类和枚举。原创 2024-03-05 17:28:44 · 1829 阅读 · 0 评论 -
设计模式之模板方法模式
模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一些步骤的实现延迟到子类中。通过这种方式,模板方法模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法模式是一种强大的设计模式,它通过定义算法骨架并将具体步骤延迟到子类中实现,使得代码具有良好的复用性和扩展性。在实际应用中,模板方法模式被广泛应用于各种框架和库中,例如 Java Servlet API、Spring Framework、Java IO 库等。原创 2024-03-06 09:39:14 · 2023 阅读 · 0 评论 -
设计模式之观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都可以得到通知并自动更新。原创 2024-03-06 09:10:47 · 1954 阅读 · 0 评论 -
设计模式之访问者模式
表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。原创 2024-03-06 09:09:43 · 2117 阅读 · 0 评论 -
设计模式之迭代器模式
提供一种顺序访问一个聚合对象(容器)中各个元素的方法,而又**不暴露其内部的表示**。原创 2024-03-06 09:03:05 · 1818 阅读 · 0 评论 -
设计模式之策略模式
定义一系列算法,封装每个算法,并使它们可以互换。原创 2024-03-06 09:01:32 · 2022 阅读 · 0 评论 -
设计模式之备忘录模式
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。原创 2024-03-06 08:59:51 · 1863 阅读 · 0 评论 -
设计模式之原型模式
通过复制现有对象来创建新对象,同时又保持了封装性。通过复制现有对象来创建新的对象,而不是通过实例化新对象。这样可以提高对象创建的效率,尤其是在对象的创建过程比较昂贵或复杂的情况下。原创 2024-03-06 08:58:27 · 1842 阅读 · 0 评论 -
设计模式之构建者模式
构建者模式(Builder Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。该模式特别适用于需要生成的对象具有复杂的内部结构或需要多个步骤进行配置的场景。原创 2024-03-06 08:52:49 · 1770 阅读 · 0 评论 -
设计模式之工厂方法模式
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,用于定义一个创建对象的接口,但是让子类决定实例化哪个类。这样,工厂方法模式使得一个类的实例化延迟到其子类。原创 2024-03-06 08:49:29 · 2103 阅读 · 0 评论