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

java学习笔记(1)

UML类图

一、UML类图核心关系详解

UML类图是面向对象设计的“语言”,通过不同的箭头符号,清晰表达类与类之间的交互逻辑,是理解设计原则的基础。

  1. 关联关系
    类与类之间存在长期的、结构性的联系,比如“用户和订单”,一个用户可以有多个订单,这种稳定的使用关系就是关联。关联可以是单向的(A知道B),也可以是双向的(A和B互相知道),在代码中通常表现为类的成员变量引用。
  2. 聚合关系
    是一种特殊的关联,代表“整体-部分”的弱依赖关系。部分可以脱离整体独立存在,比如“班级和学生”,班级解散了,学生依然存在。聚合关系强调“has-a”,整体不负责部分的生命周期管理。
  3. 组合关系
    是比聚合更强的“整体-部分”关系,部分无法脱离整体存在,整体消失时部分也随之消失,比如“人和心脏”。组合关系强调“contains-a”,整体完全负责部分的生命周期管理。
  4. 依赖关系
    是类之间临时的、非结构性的使用关系,比如A类的方法参数、局部变量中用到了B类,用完即走,不形成长期联系。依赖关系是类之间最松散的耦合形式。
  5. 泛化关系(继承)
    代表子类与父类的关系,子类继承父类的属性和方法,也可以重写父类方法,体现“is-a”的关系。泛化是面向对象实现代码复用的重要方式。
  6. 实现关系
    代表类与接口的关系,类实现接口中定义的所有方法,从而承诺提供接口约定的行为。实现关系是解耦的关键,通过接口隔离,让类仅依赖抽象,而非具体实现。

二、单一职责原则(SRP)

核心定义:一个类应该只有一个引起它变化的原因。
简单来说,就是一个类只负责一件事,把一件事做到极致,而不是一个“万能类”。

遵循SRP,我们要把类的职责拆分:界面交互类只负责界面,数据操作类只负责数据查询,数据库连接类只负责连接管理。每个类的职责足够单一,修改一处不会影响其他部分,代码的可维护性和复用性会大幅提升。

三、开闭原则(OCP)

核心定义:软件实体(类、模块、函数)应该对扩展开放,对修改关闭。
也就是说,新增功能时,不要修改原有稳定的代码,而是通过扩展的方式实现新需求。

比如最初的图表显示系统,直接在主类里根据类型判断调用饼图、柱状图的显示方法,每次新增图表类型,都要修改主类的判断逻辑,破坏了原有代码的稳定性。

遵循OCP,我们通过抽象层隔离变化:定义一个通用的图表接口,饼图、柱状图都实现这个接口,主类仅依赖接口调用方法。后续新增折线图、雷达图时,只需要新增一个实现接口的类,无需修改主类的任何代码,既实现了功能扩展,又保证了原有代码的稳定。

http://www.jsqmd.com/news/774107/

相关文章:

  • 20260507笔记
  • SMP系统架构解析与多核优化实战
  • 将Claude Code编程助手无缝对接至Taotoken服务的详细配置步骤
  • AI模型选型避坑指南:五大核心维度横向对比
  • 本地AI对话搜索引擎aii:构建私有知识库与AI助手记忆体
  • GaussDB索引实战:从‘商品销售表’案例看5种索引的正确用法与性能对比
  • VRM Blender插件:解锁虚拟角色创作的专业解决方案
  • AMD SCU35 FPGA评估套件开发指南与应用解析
  • Git Merge命令介绍(把指定分支的提交历史合并到当前分支)经典合并、Fast-Forward快进合并FF Merge、三方合并、merge commit、squash merge、合并冲突
  • 2026年高品质的香水喷头/电化铝香水喷头定制加工厂家推荐 - 行业平台推荐
  • 思路总结--华大(Stereo-seq)的空间通讯分析
  • Attio:用关系型数据库思维重塑CRM与团队协作
  • Quixel Mixer本地材质库管理全攻略:从下载、整理到备份,告别资源混乱
  • Bonsai Memory:为AI智能体构建分层记忆索引,实现Token消耗降低81%
  • 性价比高的6s与目视化管理咨询企业
  • 基于MCP协议构建企业级AI协作引擎:连接Claude与Gemini的33个生产力工具
  • 海明码+加密签名(软考专项)学习记录+速记+真题
  • SystemVerilog里disable fork的‘误伤’有多严重?一个实际仿真案例带你避坑
  • Git Reset命令介绍(用于移动HEAD,并选择是否同步更新暂存区工作区)三种模式:--soft、--mixed(默认)、--hard;修改最近提交、合并多个提交、取消git add、回退版本回退
  • 创业者人格AI:大模型垂直化与提示词工程实战解析
  • 警惕!POS系统4大安全风险别踩雷
  • 不止于测距:用51单片机和HC-SR04超声波模块DIY一个简易倒车雷达/防撞预警系统
  • Taro编译h5端口点击返回Taro.navigateBack({delta: 1,})刷新当前页面问题
  • GodotFirebase插件实战:为游戏快速集成云端用户认证与实时数据库
  • 从开源项目到商业落地:一个软PLC的‘前世今生’与技术启示
  • 【408考研·OS】核心考点:中断分类、线程模型 (KLT/ULT) 与调度算法方法论总结
  • 互联网大厂 Java 求职者面试:深入探讨微服务与云原生技术
  • Windows 一键部署 OpenClaw 教程|5 分钟上手本地 AI 智能体,简化全流程配置
  • MVCC与锁联手:彻底搞懂MySQL如何解决幻读
  • CWDM与DWDM技术详解:从核心差异到选型实战