1.JAVA设计模式

1.1 什么是设计模式

设计模式是软件开发过程中前辈们在长期实践中针对重复出现的问题总结出来的最佳解决方案。这些模式不是具体的代码实现,而是经过验证的、可重用的设计思想,能够帮助开发者更高效地解决特定类型的问题。

设计模式的重要性体现在:

  • 提供了标准化的解决方案模板

  • 促进了代码重用和设计一致性

  • 提高了系统的可维护性和扩展性

  • 便于开发者之间的沟通和理解

1.2 为什么要学习设计模式

学习设计模式对开发者有多方面的好处:

  1. 提高编程思维能力:培养面向对象的设计思维,学会从更高层次思考问题

  2. 标准化设计:遵循业界认可的最佳实践,使设计更加规范化

  3. 增强代码质量

    • 提高代码复用性,减少重复代码

    • 增强系统可扩展性,便于未来功能添加

    • 提高灵活性,使系统更容易适应变化

  4. 提升源码阅读能力:许多优秀框架和库都使用了设计模式,理解模式有助于快速掌握其设计思想

  5. 开闭原则支持:在大型项目中添加新功能时,可以最小化对现有代码的影响

2.UML建模语言基础

统一建模语言(UML)是软件设计中用于分析和设计类与类(接口)之间关系的标准化建模语言。它通过静态图形(类图)来表达系统结构。

2.1 UML类图基本要素

  1. 类(Class)表示:

  2. 接口(Interface)表示:

  3. 完整类图示例

2.2 类之间的关系详解

1. 继承关系(Inheritance)

表示"is-a"关系,即子类是父类的一种特殊化:

  • 类继承类

  • 接口继承接口

示例:

这里Student和Teacher可能继承自一个共同的Person类,共享name等属性

2. 实现关系(Realization)

表示类实现接口的功能:

Car和Ship类都实现了Vehicle接口的move()方法,但各自实现方式不同

3. 依赖关系(Dependency)

"use-a"关系,在一个类的方法中使用另一个类,具有临时性:

Person类在call方法中临时使用了MobilePhone对象,方法结束后关系解除

4. 关联关系(Association)

"has-a"关系,一个类作为另一个类的成员变量。根据强弱可分为:

聚合关系(Aggregation)

弱关联,整体和部分可以独立存在:

即使University不存在了,Teacher仍然可以存在

组合关系(Composition)

强关联,生命周期一致,整体控制部分的生命周期:

Head和Mouth是强关联,Head不存在时Mouth也不存在

3.学习笔记 

4.拓展 

4.1 设计模式分类

设计模式通常分为三大类:

创建型模式

  • 单例模式(Singleton)

  • 工厂方法模式(Factory Method)

  • 抽象工厂模式(Abstract Factory)

  • 建造者模式(Builder)

  • 原型模式(Prototype)

结构型模式

  • 适配器模式(Adapter)

  • 装饰器模式(Decorator)

  • 代理模式(Proxy)

  • 外观模式(Facade)

  • 桥接模式(Bridge)

  • 组合模式(Composite)

  • 享元模式(Flyweight)

行为型模式

  • 策略模式(Strategy)

  • 模板方法模式(Template Method)

  • 观察者模式(Observer)

  • 迭代器模式(Iterator)

  • 责任链模式(Chain of Responsibility)

  • 命令模式(Command)

  • 备忘录模式(Memento)

  • 状态模式(State)

  • 访问者模式(Visitor)

  • 中介者模式(Mediator)

  • 解释器模式(Interpreter)

4.2 设计模式应用原则

  1. 开闭原则(OCP):对扩展开放,对修改关闭

  2. 单一职责原则(SRP):一个类只负责一个功能领域

  3. 里氏替换原则(LSP):子类必须能够替换父类

  4. 依赖倒置原则(DIP):依赖抽象而非具体实现

  5. 接口隔离原则(ISP):使用多个专用接口而非单一总接口

  6. 迪米特法则(LoD):最少知识原则,减少类间耦合

  7. 组合/聚合复用原则(CARP):优先使用组合而非继承

4.3 实际应用建议

  1. 不要过度设计:只在必要时应用设计模式

  2. 理解优于记忆:掌握模式背后的思想比记住结构更重要

  3. 灵活应用:根据实际情况调整模式实现

  4. 重构到模式:可以先实现功能,再通过重构引入模式

  5. 模式组合:复杂问题可能需要多个模式组合解决

设计模式是优秀开发者的重要工具,但并非银弹。合理运用可以显著提高代码质量,而滥用则可能导致过度设计。理解每种模式的适用场景和优缺点,才能在适当的时候做出最佳选择。

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

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

相关文章

Pandas-数据清洗与处理

Pandas-数据清洗与处理一、数据清洗的核心目标二、缺失值处理1. 缺失值检测2. 缺失值处理策略(1)删除法(2)填充法三、异常值识别与处理1. 异常值检测方法(1)统计法(2)业务规则法2. 异…

在 MacOS 上安装和配置 Kafka

消息代理是一种软件,充当在不同应用程序之间发送消息的中介。它的功能类似于服务器,从一个应用程序(称为生产者)接收消息,并将其路由到一个或多个其他应用程序(称为消费者)。消息代理的主要目的…

基于Leaflet调用天地图在线API的多层级地名检索实战

目录 前言 一、天地图在线检索 1、在线检索功能 2、再谈后后接口 二、Leaflet多层级实现实例 1、层级调用实现原理 2、Leaflet中多层级调用 3、成果展示 三、总结 前言 “地图是世界的索引,而地名则是索引中的索引。”当互联网地图进入 Web 2.0 时代&#x…

基于Prompt结构的语校解析:3H日本语学校信息建模实录(4/500)

基于Prompt结构的语校解析:3H日本语学校信息建模实录(4/500) 系列延续:500所日本语言学校结构数据工程 关键词:招生结构、JLPTEJU、国籍比例、认定校、Prompt训练集 一、我们在构建什么样的语言学校语料? …

Leaflet面试题及答案(61-80)

查看本专栏目录 文章目录 🟢 面试问题及答案(61-80)61. 如何在地图上显示一个动态更新的图层?62. 如何实现地图上的热力图(Heatmap)?63. 如何自定义地图控件的位置?64. 如何处理地图加载失败的情况?65. 如何实现地图的离线功能?66. 如何将地图导出为图片?67. 如何实…

MIG_IP核的时钟系统

MIG_IP核的时钟系统时钟的种类和配置时钟的种类和配置 整体框图 DDR_PHY_CLK:DDR3的工作频率,用来得到想要的线速率。假设此时钟为800M,那么DDR双沿采样,线速率为1600Mbit; UI_CLK:DDR_PHY_CLK的四分之一…

若依框架集成阿里云OSS实现文件上传优化

背景介绍 在若依框架目前的实现中,是把图片存储到了服务器本地的目录,通过服务进行访问,这样做存储的是比较省事,但是缺点也有很多: 硬件与网络要求:服务器通常需要高性能的硬件和稳定的网络环境&#xff0…

Mac如何连接惠普M126a打印机(教程篇)

这里写自定义目录标题Mac如何连接惠普M126a打印机(教程篇)教程配置如下:Mac如何连接惠普M126a打印机(教程篇) 惠普M126a连接Mac(教程篇) 教程配置如下: 首先,先获取与HP打…

感恩日记:记录生活中的美好时刻

感恩日记的landing page登录注册填写感恩事项私信可以体验一下

一扇门铃,万向感应——用 eventfd 实现零延迟通信

🔍 本篇概要 eventfd 是 Linux 提供的一种轻量级事件通知机制。你可以把它想象成一个“计数器盒子”。它里面维护的是一个64位的计数器。写入:往盒子里放一些数字(比如 1、5、10),表示有几件事发生了。读取&#xff1a…

基于Node.js的线上教学系统的设计与实现(源码+论文+调试+安装+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。系统背景近年来,全球数字化浪潮的推进与教育公平化需求的增长,促使线上教学迎…

互斥锁详解(操作系统os)

1. 互斥锁 (Mutex) - 档案室的“智能锁”首先,我们给之前讨论的那些“锁”一个正式的名字:互斥锁 (Mutex)。概念:你可以把它简单理解成档案室门上的一把“智能锁”。它只有两种状态:locked (已上锁) 或 unlocked (未上锁)。操作&a…

自动润滑系统:从 “盲目养护“ 到智能精注的工业运维革命

​在工业运维的漫长历史中,传统润滑模式如同"定时喂饭"——无论设备实际需求,仅凭经验或固定周期执行润滑作业。这种模式埋下两大隐患:过度润滑:某汽车生产线曾因季度性强制润滑,每年浪费1.2吨润滑脂&#x…

【Java八股文总结 — 包学会】(二)计算机网络

1.一条url输入到浏览器最后显示页面的过程 URL解析与处理 浏览器解析URL(如https://www.example.com/page) 分离协议(https)、域名(www.example.com)和资源路径(/page) 检查HSTS预加…

力扣61.旋转链表

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。示例 1:输入:head [1,2,3,4,5], k 2 输出:[4,5,1,2,3]示例 2:输入:head [0,1,2], k 4 输出:[2,0,1]提示…

深度剖析:std::vector 内存机制与 push_back 扩容策略

深度剖析:std::vector 内存机制与 push_back 扩容策略 1. std::vector 核心内部结构 #mermaid-svg-8HOj3MqsD6UVgEeA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8HOj3MqsD6UVgEeA .error-icon{fill:…

GROW领导力模型

GROW领导力模型是由英国教练格雷厄姆亚历山大(Graham Alexander)、艾伦Fine和约翰惠特默(John Whitmore)在20世纪80年代提出的,最初用于体育教练领域,后来被广泛应用于企业管理、领导力发展和个人成长中。它…

打破并发瓶颈:虚拟线程实现详解与传统线程模型的性能对比

目录 一、定义与特性 二、虚拟线程实现 2.1 使用 Thread.startVirtualThread() 创建 2.2 使用 Thread.ofVirtual() 创建 2.3 使用 ThreadFactory 创建 2.4 使用 Executors.newVirtualThreadPerTaskExecutor()创建 三、虚拟线程和普通线程的区别 3.1 线程管理方式不同 3…

“28项评测23项SOTA——GLM-4.1V-9B-Thinking本地部署教程:10B级视觉语言模型的性能天花板!

一、模型介绍 GLM-4.1V-9B-Thinking是由智谱AI联合清华大学团队推出的多模态大模型,以GLM-4-9B-0414基座模型为底,通过引入“思维链推理机制”和“课程采样强化学习策略”(Reinforcement Learning with Curriculum Sampling)&…

推荐系统-Random算法

Random算法总结引言 在推荐系统研究与应用中,我们常常需要一些简单的基线算法来衡量更复杂算法的性能提升。Random(随机推荐)算法是最基础的基线方法之一,它通过随机生成评分来模拟用户对物品的偏好。虽然这种方法看似简单&#x…