当前位置: 首页 > news >正文

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.lryc.cn/news/545584.html

相关文章:

  • 初学者如何用 Python 写第一个爬虫?
  • Cocos Creator3.8.6拖拽物体的几种方式
  • 分布式Session
  • Kotlin 运算符重载
  • OpenHarmony4.1-轻量与小型系统ubuntu开发环境
  • AVR 单片机硬件供电处理
  • LeetCode 27 移除元素
  • 对“预训练”的理解
  • 论文阅读:CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION?
  • Stable Diffusion(SD)系列模型及关联算法深度解析
  • FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级
  • logback日志输出配置范例
  • 【开源免费】基于SpringBoot+Vue.JS酒店管理系统(JAVA毕业设计)
  • Unity中动态切换光照贴图LightProbe的方法
  • linux(2)用户管理
  • 在鸿蒙HarmonyOS手机上安装hap应用
  • MacBook Pro使用FFmpeg捕获摄像头与麦克风推流音视频
  • 工程化与框架系列(8)--持续集成实践
  • Python核心技术,Django学习基础入门教程(附环境安装包)
  • 【Qt-信号与槽】connect函数的用法
  • 计算机毕业设计SpringBoot+Vue.js景区民宿预约系统(源码+文档+PPT+讲解)
  • 服务流程设计和服务或端口重定向及其websocket等应用示例
  • 16. LangChain实战项目2——易速鲜花内部问答系统
  • 一文了解Conda使用
  • AI辅助学习vue第十四章
  • chromadb向量数据库使用 (1)
  • CSS—text文本、font字体、列表list、表格table、表单input、下拉菜单select
  • 关于大型语言模型的结构修剪
  • PostgreSQL 生产环境升级指南:pg_upgrade 快速完成版本升级!
  • Ubuntu2204下使用NVIDIA GeForce RTX 4090进行DeepSeek-R1-Distill-Llama-8B模型微调