Java设计模式你了解多少

news/2025/2/13 6:28:09/

Java设计模式是一种为解决软件设计中常见问题而编写的通用重复解决方案。这些问题涉及到对象创建、组合对象以形成更复杂的对象、组织和管理对象之间的关系以及在系统运行时动态地切换对象的行为等方面。Java设计模式已经被广泛应用于软件开发领域,并且在现代软件开发中扮演着至关重要的角色。

本文将向您介绍Java设计模式的基础知识以及最常用的模式,以下是该主题的详细信息:

什么是Java设计模式?

Java设计模式是一种常见的解决软件设计中常见问题的方法。设计模式是指在特定情况下重复出现的问题的解决方案。这些解决方案已经得到实践证明,并且可以继续使用和改进。Java设计模式的目标是使软件设计更加灵活、可重用和易于理解。

Java设计模式有23种标准模式,它们被分为三大类别:创建型、结构型和行为型。创建型模式与对象的创建有关,结构型模式有关对象组合,行为型模式有关对象之间的交互。

创建型模式

工厂模式

工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们使用一个共同的接口来创建多个对象。其中只需指定要创建的类型即可。

工厂模式有三个主要组件:工厂接口、具体工厂和产品接口。工厂接口定义了所有工厂应遵循的标准,具体工厂实现工厂接口,并根据需要生成产品。产品接口定义了所有产品应该遵循的标准。具体产品实现产品接口,并提供自己独特的实现。

单例模式

单例模式是一种创建型模式,它保证了一个类仅有一个实例,并提供了访问这个实例的全局点。这种模式通常用于控制资源的访问,例如数据库连接池或线程池等。

在单例模式中,我们使用一个私有构造函数来防止类的直接实例化。我们还定义了一个静态方法来获取类的单个实例。当第一次请求实例时,我们创建并返回实例。当以后的请求到达时,我们返回已经创建的实例。

原型模式

原型模式是一种创建型模式,它允许我们使用现有的对象作为模板来创建新对象。原型模式可以克隆一个对象,而无需通过构造函数创建对象。这可以提高对象的创建速度,尤其是当创建对象的成本很高时。

在原型模式中,我们使用一个克隆方法来复制现有对象。克隆方法返回一个新的对象,该对象具有与原始对象相同的属性和方法。克隆方法可以是深拷贝或浅拷贝。

结构型模式

适配器模式

适配器模式是一种结构型模式,它允许不兼容的接口之间进行通信。适配器模式将一个类的接口转换为另一个类的接口,从而使它们能够协同工作。

在适配器模式中,适配器类实现了目标接口,并包含一个适配者类的对象。适配器类将客户端请求转换为适配者类可以处理的形式,并将适配者类的响应转换为客户端可以理解的形式。

桥接模式

桥接模式是一种结构型模式,它将抽象和实现分离开来,以便它们可以独立变化。在桥接模式中,我们使用一个抽象类作为桥梁,连接两个不同的类层次结构。

在桥接模式中,抽象类包含一个指向实现类的引用。实现类负责实现抽象类中定义的方法。这种分离允许我们更容易地修改实现细节,而无需影响到抽象接口。

组合模式

组合模式是一种结构型模式,它允许我们使用树形结构来表示部分-整体层次结构。在组合模式中,我们使用一个统一的接口,使用户可以将单个对象和组合对象视为相同的对象。

在组合模式中,我们使用一个组件接口来定义组合对象和单个对象的通用行为。组件接口有两个实现:叶节点和容器节点。叶节点表示单个对象,而容器节点表示组合对象。容器节点包含了其他组件,从而构成了树形结构。

行为型模式

观察者模式

观察者模式是一种行为型模式,它允许对象在状态发生改变时通知其观察者。在观察者模式中,我们使用一个主题来维护状态,并通知观察者。

在观察者模式中,主题包含一个观察者列表,并提供了方法来添加和删除观察者。当主题的状态改变时,它会通知其观察者。观察者接收到通知后,可以执行一些操作来响应状态的变化。

策略模式

策略模式是一种行为型模式,它允许我们在运行时选择算法的行为。在策略模式中,我们将算法封装在独立的策略类中,并通过委托来进行调用。

在策略模式中,我们定义了一个策略接口,该接口包含算法的抽象方法。每个算法都实现了策略接口,并提供自己独特的实现。客户端可以在运行时选择要使用的策略。

模版方法模式

模板方法模式是一种行为型模式,它定义了一个算法的骨架,并允许子类重新定义某些步骤。在模板方法模式中,我们使用一个抽象类来定义算法,并在其中定义一个或多个空方法。

在模板方法模式中,子类实现了抽象类中定义的空方法,并提供自己独特的实现。这允许子类在不改变算法结构的情况下扩展或修改算法的行为。

结论

Java设计模式是一种通用的解决方案,它可以帮助我们解决软件设计中常见的问题。本文介绍了Java设计模式的基础知识以及最常用的模式,包括创建型、结构型和行为型模式。

如果您是Java开发人员,那么学习和掌握Java设计模式是非常重要的。它可以帮助您编写更灵活、可重用和易于理解的代码。同时也需要注意,模式并不是万能的,需要根据具体场景进行选择和应用。


http://www.ppmy.cn/news/47850.html

相关文章

文本聚类与摘要,让AI帮你做个总结

你好,我是徐文浩。 过去的十多讲里,我为你介绍了各种利用大语言模型的方法和技巧。特别是在过去两讲里,我们也尝试更加深入地利用开源代码帮我们完成一些工作。通过llama-index这样的开源库,我们能够将自己的数据和大语言模型连接…

JavaScript中如何删除对象/数组中null、undefined、空对象及空数组实例代码

如下,对于一个多层嵌套的数据结构:例如 要做的就是删除所有value为空,数组为空,对象为空的字段 const querys {name: 测试,httpMethod: ,httpHeaders: [{key: Accept,value: test,},],restParams: [{key: ,value: ,},],body: {b…

markdown基本语法

来自神秘人儿的投稿! markdown的使用,可以参考https://markdown.com.cn/basic-syntax/ 标题:用 # 表示 段落:enter即可,两端之间有一个空行 换行:一行的末尾加两个或者多个空格,两端之间没有…

Python双向循环链表的操作

目录 一、双向循环链表 双向循环链表图 二、双向循环链表的操作 1、判断链表是否为空 2,链表长度 3,遍历整个链表 4,在链表头部添加元素 5、链表尾部添加元素 6,在指定位置插入元素 7,修改指定位置的元素 8&a…

Java 并发工具合集 JUC 大爆发!!!

并发工具类 通常我们所说的并发包也就是 java.util.concurrent (JUC),集中了 Java 并发的各种工具类, 合理地使用它们能帮忙我们快速地完成功能 。 1. CountDownLatch CountDownLatch 是一个同步计数器,初始化的时候 传入需要计数的线程等待数…

js和jQuery知识点总结

目录 一.jQuery知识点梳理 1.jQuery入门&选择器 案例1 表格隔行换色 二.$工具方法&属性&CSS 案例2:实现全选功能 三.筛选&过滤&位置 案例3.实现返回顶部功能 四.事件&效果 二.JavaScript知识点梳理 一.js核心语法 二.函数和wind…

29考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略MATLAB程序-日前日内实时+需求响应+协调调度

资源地址: 29考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略MATLAB程序-日前日内实时需求响应协调调度-Matlab文档类资源-CSDN文库 参考文献: 考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略——金力 主要内容&…

【数据聚类|深度聚类】Heterogeneous Tri-stream Clustering Network(HTCN)论文研读

文章目录 AbstractIntroductionRelated WorkDeep ClusteringSelf-supervised LearningProposed FrameworkFramework OverviewInstance-level ContrastivenessCluster-level ContrastivenessOverall Loss FunctionImplementation DetailsExperimentsDatasets and Evaluation Met…