设计模式基础知识点(七大原则、UML类图)
Java设计模式(设计模式七大原则、UML类图)
- 设计模式的目的
- 设计模式七大原则
- 单一职能原则(SingleResponsibility)
- 接口隔离原则(InterfaceSegreation)
- 依赖倒转原则(DependenceInversion)
- 里氏替换原则(LiskovSubstitution)
- 开闭原则(OpenClosed)
- 迪米特原则(Demeter)
- 合成复用原则(CompositeReuse)
- UNL类图
- 依赖关系(Dependence)
- 泛化关系(Generalization)
- 实现关系(Implementation)
- 关联关系(Association)
- 聚合关系(Aggregation)
- 组合关系(Composition)
设计模式的目的
- 提高代码复用性:相同的代码进行复用,不用多次编写;
- 提高代码可读性:编程规范,并于他人阅读和理解;
- 提高代码扩展性:设计模式遵循“对扩展开放,对修改关闭”,便于扩展;
整体来讲,程序中使用设计模式可以使代码“高内聚、低耦合”。
设计模式七大原则
设计模式原则,就是在编程时,应当遵守的原则,是设计模式的基础,也是设计模式为什么这么设计的依据。设计模式通常有7大原则:单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则。
单一职能原则(SingleResponsibility)
- 简单的来说,就是一个类只负责一项职责。
- 注意事项:
- 一个类只负责一项职责,降低了类之间的耦合度,提高了类代码的可读性与可维护性,降低了进行代码变更的风险性。
- 通常情况下我们应当遵守单一原则,只有在逻辑足够简单的情况下可以违反单一原则(也不建议违反),只有在类方法足够少的情况下,在方法上保持单一原则。
接口隔离原则(InterfaceSegreation)
- 接口隔离原则就是,客户端不应该依赖它不需要的接口,也就是一个类对另一个类的依赖应该建立在最小的接口上。
举例:接口A存在1-5个方法,类B实现接口A并实际重写了了1-3方法,类C实现接口A并实际重写了3-5方法,客户端类D通过接口A依赖了类B和C。问题:那么对于类B和类C来说,对于接口A的依赖就没有建立在最小接口上。改进:需要将接口A拆分为A1并实际重写1-3方法,和接口A2并实际重写3-5方法,然后类B实现接口A1,类C实现接口A2.
依赖倒转原则(DependenceInversion)
- 高层模块不应该依赖底层模块,二者都应该依赖其抽象,在Java中抽象就是指接口(Interface)和抽象类(Abstract Class)
- 抽象不应该依赖细节,细节应该依赖抽象。
- 依赖倒转的中心思想是面向接口编程。
- 依赖倒转原则的设计理念是:相对于细节(具体实现类)的多变性,接口和抽象类要稳定得多。以抽象为基础搭建的架构要比以细节搭建的架构稳定得多。
- 使用接口或者抽象类的目的是制定好规范,不会涉及任何具体的操作,把展示细节交给具体实现类去完成。
里氏替换原则(LiskovSubstitution)
- 因为继承会给程序带来侵入性,程序的可移植性低。
- 里氏替换的核心思想是:所有引用基类的地方都必须透明地使用其子类对象,也就是在使用继承时候,在子类中尽量不要重写父类的方法。
- 继承实际上会让两个类的耦合性增加,在适当的情况下,可以通过聚合、组合、依赖来解决。
开闭原则(OpenClosed)
- 一个软件应该对扩展开放(提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。
- 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改原有代码来实现变化。
迪米特原则(Demeter)
- 一个对象应该和其它对象保持最小的了解,类与类的关系越密切,耦合度越大。
- 迪米特法则又叫最小知道原则,即一个类对自己依赖的类知道越少越好。 也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供public方法外,不应该对外泄露任何信息。
- 迪米特法则还有个更简单的定义: 至于直接的朋友通信。
- 直接朋友定义:我们称为一个类中出现的成员变量、方法参数、方法返回值中的类是该类的直接朋友,其余出现在局部变量中的类不是直接朋友。
- 迪米特最总思想就是:一个类相关的事情,就在该类中解决,而不是放在其它类中。
合成复用原则(CompositeReuse)
- 程序设计时候,尽量采取合成、聚合的方式实现, 而不是使用继承。
- 将需要变化的代码和不需要变化的代码分别独立出来,不要混淆,也就是抽取封装。
- 针对接口编程,而不是针对具体实现编程。
- 为了减少交互对象间的轻耦合而设计。
UNL类图
依赖关系(Dependence)
- 定义:只要在类中用到了对方,那么他们之间就存在依赖关系。
- 在类中用到了对方指:在类的成员变量、在方法的返回类型、在方法的接受参数类型、在方法中使用到。

泛化关系(Generalization)
- 定义:泛化关系实际上就是继承关系,他就是依赖关系的特例。

实现关系(Implementation)
- 定义:实现关系实际上就是一个类实现一个接口,也是依赖关系的特例。例如:A类实现了B接口,那么我们就称A和B是实现关系

关联关系(Association)
- 定义:关联关系就是类类与类之间的联系,也是依赖关系的特例。
- 关联关系具有导航性:即双向关系和单向关系,例如:单项一对一关系,双向一对一关系。

聚合关系(Aggregation)
- 定义: 聚合关系就是整体和部分的关系,且整体和部分可以分开的。聚合关系是关联关系的特例。

组合关系(Composition)
- 定义:组合关系是整体和部分的关系,但是整体和部分不可以分开的。

相关文章:
设计模式基础知识点(七大原则、UML类图)
Java设计模式(设计模式七大原则、UML类图) 设计模式的目的设计模式七大原则单一职能原则(SingleResponsibility)接口隔离原则(InterfaceSegreation)依赖倒转原则(DependenceInversion࿰…...
Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)
文章目录 Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) 路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp init进程把我们的BootAnimation的二进制文件拉起来了…...
微软远程连接工具:Microsoft Remote Desktop for Mac 中文版
Microsoft Remote Desktop 是一款由微软开发的远程桌面连接软件,它允许用户从远程地点连接到远程计算机或虚拟机,并在远程计算机上使用桌面应用程序和文件。 下载地址:https://www.macz.com/mac/5458.html?idOTI2NjQ5Jl8mMjcuMTg2LjEyNi4yMz…...
【安规介绍】
文章目录 一、基础知识安规上的六类危险的防护:安全电压漏电流接触电流能量问题:火灾问题:热问题结构问题阻燃等级绝缘等级:对接地系统的要求:结构要求:电气要求: 二、设计的关键电气绝缘距离电气爬电距离:…...
[sylar]后端学习:配置环境(一)
1.介绍 基于sylar大神的C高性能后端网络框架来进行环境配置和后续学习。网站链接:sylar的Linux环境配置 2.下载 按照视频进行下载,并进行下载,并最好还要下载一个vssh的软件。可以直接在网上搜索即可。 sylar_环境配置,vssh下…...
XDMA原理及其应用和发展
XDMA原理 XDMA的主要原理是通过直接访问主机内存,实现数据的快速传输。在传统的DMA(Direct Memory Access)技术中,数据传输需要经过CPU的干预,而XDMA可以绕过CPU,直接将数据从外设读取到主机内存或者从主机…...
携程梁建章:持续投资创新与AI,开启旅游行业未来增长
5月30至31日,携程集团在上海和张家界举办Envision 2024全球合作伙伴大会,邀请超50个国家和地区的1600余名外籍旅游业嘉宾与会,共同探讨中国跨境旅游市场发展机遇,讲好中国故事。 携程国际业务增速迅猛,创新与AI解锁未…...
【网络安全的神秘世界】在win11搭建pikachu靶场
🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 下载pikachu压缩包 https://github.com/zhuifengshaonianhanlu/pikachu 下载好的pikachu放在phpstudy_pro/www目录下 创建pikachu数据库 打开phpstudy软件…...
基于Java的零食管理系统的设计与实现(论文+源码)_kaic
摘 要 随着科技的进步,以及网络的普及,都为人们的生活提供了极大的方便。因此,在管理”三姆”宿舍在线零食商店时,与现代的网络联系起来是非常必要的,本次设计的系统在研发过程中应用到了Java技术,这在一定…...
【案例实操】银河麒麟桌面操作系统实例分享,V10SP1重启后网卡错乱解决方法
1.问题现象 8 个网口, 命名从 eth1 开始到 eth8。 目前在系统 grub 里面加了 net.ifnames0 biosdevname0 参数, 然后在 udev 规则中加了一条固定网卡和硬件 pci 设备号的规则文件。 最后在 rc.local 中加了两条重新安装网卡驱动的命令( rmmod…...
初级前端开发岗
定位: 日常任务的辅助执行者,前端基础建设的参与者。 素质要求: 是否遵循部门敏捷流程、规范、P0制度;具备良好的沟通和协作能力;负责日常迭代任务的落地执行;拥有较强的执行力,能够灵活解决问题; 职责:…...
颠仆流离学二叉树2 (Java篇)
本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…...
柏林自由大学研究团队《Ecology Letters 》揭示AMF在植物对全球变化响应的作用
全球环境变化正在影响陆生植物生长。植物已经进化出各种策略来应对这些挑战,其中之一是与丛枝菌根真菌(AMF)形成共生关系(高达80%的陆生植物物种)。AMF为寄主植物提供各种益处,例如营养吸收、耐受性、食草动物防御和抗病能力,以换取糖和脂质(…...
libevent源码跨平台编译(windows/macos/linux)
1.windows编译: 克隆: git clone https://github.com/libevent/libevent.git 克隆成功 生成makefile 生成成功 默认不支持OpenSSL,MbedTLS,ZLIB这三个库 编译: cmake --build . --config release...
idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)
文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project;Java;选择jdk的版本;next;next;填写项目名字,选择保存的路径;…...
LeetCode 每日一题 2024/5/27-2024/6/2
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 5/27 2028. 找出缺失的观测数据5/28 2951. 找出峰值5/29 2981. 找出出现至少三次的最长特殊子字符串 I5/30 2982. 找出出现至少三次的最长特殊子字符串 II5/31 2965. 找出缺…...
BOOST_SREATCH
BOOST Boost是一个由C社区开发的开源库,为C语言标准库提供扩展。这个库由C标准委员会库工作组成员发起,旨在提供大量功能和工具,帮助C开发者更高效地编写代码。Boost库强调跨平台性和对标准C的遵循,因此与编写平台无关࿰…...
MySQL学习——获取数据库和表格的信息
如果忘记了数据库或表的名称,或者不确定给定表的结构(例如,其列的名称),该怎么办呢?MySQL通过几个语句解决了这个问题,这些语句提供了有关它支持的数据库和表的信息。 你之前已经看过SHOW DATA…...
Go语言redis框架 — go-redis
https://zhuanlan.zhihu.com/p/645669818 一、简述 1. API友好,命令名称和参数与Redis原生命令一致,使用简单方便。 2. 支持完整的Redis命令集,覆盖了字符串、哈希、列表、集合、有序集合、HyperLogLog等数据结构。 3. 支持连接池&#x…...
C++ | Leetcode C++题解之第125题验证回文串
题目: 题解: class Solution { public:bool isPalindrome(string s) {int n s.size();int left 0, right n - 1;while (left < right) {while (left < right && !isalnum(s[left])) {left;}while (left < right && !isalnu…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
