Java 设计模式:软件开发的精髓与艺

目录

    • 一、设计模式的起源
    • 二、设计模式的分类
      • 1. 创建型模式
      • 2. 结构型模式
      • 3. 行为型模式
    • 三、设计模式的实践
      • 1. 单例模式
      • 2. 工厂模式
      • 3. 策略模式
    • 四、设计模式的优势
    • 五、设计模式的局限性
    • 六、总结

在软件开发的浩瀚星空中,设计模式犹如一颗颗璀璨的星辰,照亮了开发者前行的道路。它们是经验的结晶,是智慧的传承,帮助我们解决了一个又一个棘手的问题。今天,就让我们一同走进 Java 设计模式的世界,探索那些隐藏在代码背后的奥秘。

一、设计模式的起源

设计模式的概念最早可以追溯到 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四位大师合著的《Design Patterns: Elements of Reusable Object-Oriented Software》一书。这本书被誉为 “四人帮”(Gang of Four,GoF)的经典之作,书中总结了 23 种设计模式,为软件开发提供了宝贵的指导。

二、设计模式的分类

设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。

1. 创建型模式

创建型模式关注对象的创建过程,旨在以适当的方式创建对象,增强代码的灵活性和可复用性。常见的创建型模式有:

  • 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。
  • 工厂模式(Factory Pattern):定义一个创建对象的接口,由子类决定实例化哪一个类。
  • 抽象工厂模式(Abstract Factory Pattern):提供一个接口,创建相关或依赖对象的家族,而无需指定具体类。
  • 建造者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
  • 原型模式(Prototype Pattern):通过复制现有的实例来创建新的对象,而不是通过实例化类。

2. 结构型模式

结构型模式关注类和对象的组合,旨在以适当的方式组合对象,形成更大的结构。常见的结构型模式有:

  • 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作。
  • 装饰器模式(Decorator Pattern):动态地给对象添加一些额外的职责,而不影响其他对象。
  • 代理模式(Proxy Pattern):为其他对象提供一个代理以控制对这个对象的访问。
  • 桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立地变化。
  • 组合模式(Composite Pattern):将对象组合成树形结构以表示部分-整体的层次结构,使用户对单个对象和组合对象的使用具有一致性。

3. 行为型模式

行为型模式关注对象之间的协作,旨在以适当的方式让对象之间进行通信和协作,完成特定的任务。常见的行为型模式有:

  • 策略模式(Strategy Pattern):定义一系列算法,并将每个算法封装起来,使它们可以互换使用。
  • 模板方法模式(Template Method Pattern):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法结构即可重新定义算法的某些特定步骤。
  • 观察者模式(Observer Pattern):定义对象间的一对多依赖,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。
  • 命令模式(Command Pattern):将请求封装为对象,从而可用不同的请求、队列或者日志来参数化其他对象,支持可撤销的操作。
  • 责任链模式(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。

三、设计模式的实践

1. 单例模式

单例模式确保一个类只有一个实例,并提供全局访问点。以下是一个简单的单例模式实现:

public class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance == null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27292.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity小功能实现:鼠标点击移动物体

1、功能描述 当玩家点击鼠标时,场景中的物体会移动到鼠标点击的位置。这个功能可以用于控制角色移动、放置物体等场景。 2、实现步骤 创建Unity项目:首先,打开Unity并创建一个新的3D项目。 添加3D物体:在场景中创建一个3D物体&am…

避坑!用Docker搞定PHP开发环境搭建(Mac、Docker、Nginx、PHP-FPM、XDebug、PHPStorm、VSCode)

本次更新主要是对环境版本进行了更新,例如php 7.3.7升级到了7.3.8,另外之前的版本有同学踩了坑,主要是官方docker镜像php:7.3.7-fpm和php:7.3.8-fpm使用了不同版本的debian,后面会提到,请各位同学留意。 因为最近换电脑…

Spring Boot集成Jetty、Tomcat或Undertow及支持HTTP/2协议

目录 一、常用Web服务器 1、Tomcat 2、Jetty 3、Undertow 二、什么是HTTP/2协议 1、定义 2、特性 3、优点 4、与HTTP/1.1的区别 三、集成Web服务器并开启HTTP/2协议 1、生成证书 2、新建springboot项目 3、集成Web服务器 3.1 集成Tomcat 3.2 集成Jetty 3.3 集成…

京东web 详情 cfe滑块分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 data response.json() pri…

电池管理系统(BMS)架构详细解析:原理与器件选型指南

BMS(电池管理系统)架构详细讲解 从你提供的BMS(Battery Management System)架构图来看,主要涉及到电池监控模块、通信模块、功率控制模块等部分。下面我将详细讲解该架构的各个功能模块及其工作原理。 1. 电池管理核…

Linux常见基本指令(二)

目录 1、Linux基础指令 文本查看 cat指令 more指令 less指令 head指令&tail指令 时间相关指令 查找、搜索相关指令 find指令 which指令 whereis指令 alias指令 grep指令 打包压缩和解压缩 zip指令(压缩) unzip(解压&…

HarmonyOS学习第12天:解锁表格布局的奥秘

表格布局初相识 不知不觉,我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里,我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能,比如组件的基本使用、布局的初步搭建等,这些知识就像一块块基石,为我…

动态规划刷题

文章目录 动态规划三步问题题目解析代码 动态规划 1. 状态表示:dp[i],表示dp表中i下标位置的值 2. 状态转移方程:以i位置位置的状态,最近的一步来划分问题,比如可以将状态拆分成前状态来表示现状态,dp[i] …

大语言模型微调的基本概念介绍

大型语言模型(LLMs)正在以惊人的速度发展,LLM微调的潜力更是如此。大型语言模型的生命周期有几个关键步骤,今天我们将要介绍这个周期中最丰富、最耗时的一部分——LLM微调过程。 大语言模型的生命周期 在深入了解大型语言模型&a…

PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】

今天尝试在pycharm上接入了本地部署的deepseek,实现了AI编程,体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI(CodeGPT) 首先了解不同版本的deepsee…

Spring MVC 程序开发(1)

目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么?有什么关系? Servlet 是 java 官方定义的 web 开发的标准规范;Tomcat 是…

Notepad++下载地址【亲测好用】

网上下载链接五花八门,最终找到了一个官方下载链接。 本文章就用来记录Notepad下载网址 https://github.com/notepad-plus-plus/notepad-plus-plus/tags

LeetCode 873. Length of Longest Fibonacci Subsequence(2025/2/27每日一题)

昨天工作耽搁了,没来得及打卡每日一题,今日补上: 标题:Length of Longest Fibonacci Subsequence 题目: 例子: Example 1: Input: arr [1,2,3,4,5,6,7,8] Output: 5 Explanation: The longest subsequ…

【uniapp】在UniApp中实现持久化存储:安卓--生成写入数据为jsontxt

在移动应用开发中,数据存储是一个至关重要的环节。对于使用UniApp开发的Android应用来说,缓存(Cache)是一种常见的数据存储方式,它能够提高应用的性能和用户体验。然而,缓存数据在用户清除缓存或清除应用数…

【小羊肖恩】小羊杯 Round 2 C+K

题目链接:https://ac.nowcoder.com/acm/contest/100672#question C.是毛毛虫吗? 思路: 其实很简单,假设我们要满足题目所给条件,那么这个毛毛虫最坏情况下肯定是一条如下图所示的无向图 右端省略号为对称图形 &…

【定昌Linux系统】部署了java程序,设置开启启动

将代码上传到相应的目录,并且配置了一个.sh的启动脚本文件 文件内容: #!/bin/bash# 指定JAR文件的路径(如果JAR文件在当前目录,可以直接使用文件名) JAR_FILE"/usr/local/java/xs_luruan_client/lib/xs_luruan_…

17、什么是智能指针,C++有哪几种智能指针【高频】

智能指针其实不是指针,而是一个(模板)类,用来存储指向某块资源的指针,并自动释放这块资源,从而解决内存泄漏问题。主要有以下四种: auto_ptr 它的思想就是当当一个指针对象赋值给另一个指针对…

基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践

目录 前言 1、研究背景 2、研究意义 一、研究目标 1、“地理难抵点”的概念 二、“难抵点”空间检索实现 1、数据获取与处理 2、计算流程 3、难抵点计算 4、WebGIS可视化 三、成果展示 1、华东地区 2、华南地区 3、华中地区 4、华北地区 5、西北地区 6、西南地…

Git学习

Git命令 1、管理文件夹,创建版本仓库 创建文件夹 mkdir repos初始化命令 git init2、查看工作区的文件状态 注:新增和修改过后的文件都是红色 git status3、提交缓存区 注:加入缓存区后的文件变成绿色 git add . git add 文件名4、生…

数据库拓展操作

目录 一、截断表: 操作目的: 操作内容: 性能影响: 基本语法: 例子: 二、插入查询结果: 基本语法: 例子: 三、聚合函数: 常用函数: 基…