一文总结Java的23种设计模式

Java 设计模式是 Java 编程中常用的一些解决问题的模板,它们代表了最佳的实践和经验。设计模式可以帮助我们编写可复用、可维护和可扩展的代码。根据《设计模式:可复用面向对象软件的基础》一书,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。本文将对 Java 中的 23 种设计模式进行总结和概述。

一、创建型模式

创建型模式主要关注对象的创建过程,目的是在不直接使用 new 运算符的情况下创建对象,增加程序的灵活性和可扩展性。

  1. 单例模式(Singleton Pattern)
    单例模式确保一个类只有一个实例,并提供一个全局访问点。
  2. 工厂方法模式(Factory Method Pattern)
    工厂方法模式定义一个接口用于创建对象,但由子类决定要实例化哪一个类。
  3. 抽象工厂模式(Abstract Factory Pattern)
    抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
  4. 建造者模式(Builder Pattern)
    建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
  5. 原型模式(Prototype Pattern)
    原型模式通过复制现有的实例来创建新的实例,而不是通过构造函数创建。
    二、结构型模式
    结构型模式主要关注类和对象的组合,目的是通过组合类和对象来形成更大的结构。
  6. 适配器模式(Adapter Pattern)
    适配器模式允许不兼容接口的类一起工作,通过包装不兼容接口的对象。
  7. 桥接模式(Bridge Pattern)
    桥接模式将抽象与实现分离,以便两者可以独立变化。
  8. 组合模式(Composite Pattern)
    组合模式用于将对象组合成树形结构以表示部分-整体的层次结构。
  9. 装饰器模式(Decorator Pattern)
    装饰器模式动态地给一个对象添加一些额外的职责,而不改变其接口。
  10. 门面模式(Facade Pattern)
    门面模式提供了一个统一的接口来访问一组接口,隐藏了系统的复杂性。
  11. 享元模式(Flyweight Pattern)
    享元模式通过共享尽可能多的相似对象来最小化内存使用。
  12. 代理模式(Proxy Pattern)
    代理模式为其他对象提供一种代理以控制对这个对象的访问。
    三、行为型模式
    行为型模式主要关注对象之间的通信,目的是通过对象之间的不同职责和算法来简化对象之间的通信。
  13. 职责链模式(Chain of Responsibility Pattern)
    职责链模式避免将请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。
  14. 命令模式(Command Pattern)
    命令模式将请求封装为一个对象,从而使用户和处理请求的对象解耦。
  15. 解释器模式(Interpreter Pattern)
    解释器模式为语言创建解释器,用来解释该语言中的句子。
  16. 迭代器模式(Iterator Pattern)
    迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而不暴露其内部的表示。
  17. 中介者模式(Mediator Pattern)
    中介者模式定义一个对象来封装一组对象之间的交互,使它们不需要显式地相互引用。
  18. 备忘录模式(Memento Pattern)
    备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  19. 观察者模式(Observer Pattern)
    观察者模式定义对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖它的对象都会得到通知并自动更新。
  20. 状态模式(State Pattern)
    状态模式允许一个对象在其内部状态改变时改变它的行为。
  21. 策略模式(Strategy Pattern)
    策略模式定义一系列算法,并将每一个算法封装起来,使它们可以互相替换。
  22. 模板方法模式(Template Method Pattern)
    模板方法模式在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中实现。
  23. 访问者模式(Visitor Pattern)
    访问者模式表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
    四、总结
    设计模式是 Java 编程中不可或缺的一部分,它们可以帮助我们编写更清晰、更可维护的代码。掌握这些设计模式不仅可以提高我们的编程水平,还可以让我们更好地理解和解决复杂的问题。在实际开发中,我们需要根据具体的需求和场景选择合适的设计模式,以达到最佳的设计效果。
相关推荐
无极程序员几秒前
PHP 条件语句
android·开发语言·ide·php·android studio
南宫生12 分钟前
力扣-Hot100-链表其一【算法学习day.34】
java·学习·算法·leetcode·链表
罔闻_spider12 分钟前
递归(二)---力扣22括号生成,力扣78求子集
开发语言·python
奔跑的废柴21 分钟前
LeetCode 18. 四数之和 Java题解
java·算法·leetcode
写bug写bug23 分钟前
探秘 Java 泛型:从类型参数到边界限制与类型擦除
java·后端
h汉堡24 分钟前
C语言的内存函数
c语言·开发语言·c++·学习
彭彭不吃虫子28 分钟前
【字符串】给定一个字符串 text 和字符串列表 words,返回 words 中每个单词在 text 中的位置(要求最终的位置从小到大进行排序)
开发语言·数据结构·python
凡人的AI工具箱36 分钟前
15分钟学 Go 第 59 天 :更高级的Go话题——接触微服务
开发语言·人工智能·后端·微服务·golang
北国13741 分钟前
蓝桥杯-顺子日期
java·蓝桥杯
只是有点小怂42 分钟前
2-way 8-sets 缓存的初始化
java·spring·缓存