Java常用设计模式

常用设计模式

Java中常用的设计模式包括23种经典设计模式,它们分为三大类:创建型、结构型和行为型。

创建型模式(Creational Patterns):这类模式关注对象的创建过程,将对象的创建和使用分离,以提高系统的灵活性和可扩展性。包括以下几种:

  • 单例模式(Singleton)
  • 工厂模式(Factory)
  • 抽象工厂模式(Abstract Factory)
  • 建造者模式(Builder)
  • 原型模式(Prototype)

结构型模式(Structural Patterns):这类模式关注如何组合类和对象以形成更大的结构,主要用于处理类和对象的组合。包括以下几种:

  • 适配器模式(Adapter)
  • 桥接模式(Bridge)
  • 组合模式(Composite)
  • 装饰器模式(Decorator)
  • 外观模式(Facade)
  • 享元模式(Flyweight)
  • 代理模式(Proxy)

行为型模式(Behavioral Patterns):这类模式关注对象之间的通信,主要用于描述程序在运行时复杂的控制流程。包括以下几种:

  • 责任链模式(Chain of Responsibility)
  • 命令模式(Command)
  • 解释器模式(Interpreter)
  • 迭代器模式(Iterator)
  • 中介者模式(Mediator)
  • 备忘录模式(Memento)
  • 观察者模式(Observer)
  • 状态模式(State)
  • 策略模式(Strategy)
  • 模板方法模式(Template Method)
  • 访问者模式(Visitor)

单例模式(Singleton Pattern)

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其他对象提供这一实例。

工厂模式(Factory Pattern)

工厂模式是一种创建对象的设计模式,它通过定义一个工厂类来创建对象实例,而不是通过直接调用构造函数来创建对象。工厂模式将对象的创建过程封装在工厂类中,客户端只需要通过工厂类来创建对象,而不需要了解对象的具体实现细节。


抽象工厂模式(Abstract Factory Pattern)

通过定义一个创建对象的接口来创建对象,但将具体实现的决定留给子类来决定。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。



装饰器模式(Decorator Pattern)

在Java中,使用继承和组合的结合来实现装饰器模式。 具体来说,您需要创建一个基类或接口来定义对象的核心行为,然后创建一个或多个装饰器类来向对象添加附加行为。 每个装饰器类都具有对其装饰的对象的引用,并且它可以在委托给对象的原始行为之前或之后修改对象的行为。


代理模式(Proxy Pattern)

代理模式提供了间接访问目标对象的一种方式;即通过代理对象访问目标对象。

这样做的好处是,可以在不改变原有目标对象的基础上,对目标对象增加额外的扩展功能。


观察者模式(Observer Pattern)

Java观察者模式是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。该模式适用于需要在对象间建立动态的、松散耦合的关系的场景,例如事件处理等。




策略模式(Strategy Pattern)

策略模式是一种行为型设计模式,策略模式通常由一个接口和多个实现该接口的类组成。客户端将使用该接口来调用算法,而不是直接调用实现类。这样,客户端就可以在运行时选择不同的算法实现,而不需要修改代码。

相关推荐
多米Domi01111 分钟前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
2301_8223776511 分钟前
模板元编程调试方法
开发语言·c++·算法
csbysj202014 分钟前
Python 循环嵌套
开发语言
测试_AI_一辰17 分钟前
Agent & RAG 测试工程05:把 RAG 的检索过程跑清楚:chunk 是什么、怎么来的、怎么被命中的
开发语言·人工智能·功能测试·自动化·ai编程
Coding茶水间20 分钟前
基于深度学习的输电电力设备检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
清风~徐~来24 分钟前
【视频点播系统】BRpc 介绍及使用
开发语言
啟明起鸣25 分钟前
【C++ 性能提升技巧】C++ 的引用、值类型、构造函数、移动语义与 noexcept 特性,可扩容的容器
开发语言·c++
故以往之不谏27 分钟前
函数--值传递
开发语言·数据结构·c++·算法·学习方法
今天_也很困36 分钟前
LeetCode热题100-560. 和为 K 的子数组
java·算法·leetcode