同步异步日志系统-设计模式
六大原则
单⼀职责原则(Single Responsibility Principle)
类的职责应该单⼀,⼀个⽅法只做⼀件事。职责划分清晰了,每次改动到最⼩单位的⽅法或
类。
使⽤建议:两个完全不⼀样的功能不应该放⼀个类中,⼀个类中应该是⼀组相关性很⾼的函
数、数据的封装
⽤例:⽹络聊天:⽹络通信 & 聊天,应该分割成为⽹络通信类 & 聊天类
开闭原则(Open Closed Principle)
对扩展开放,对修改封闭
使⽤建议:对软件实体的改动,最好⽤扩展⽽⾮修改的⽅式。
⽤例:超时卖货:商品价格---不是修改商品的原来价格,⽽是新增促销价格。
⾥⽒替换原则(Liskov Substitution Principle)
通俗点讲,就是只要⽗类能出现的地⽅,⼦类就可以出现,⽽且替换为⼦类也不会产⽣任何错 误或异常。
在继承类时,务必重写⽗类中所有的⽅法,尤其需要注意⽗类的protected⽅法,⼦类尽量不要 暴露⾃⼰的public⽅法供外界调⽤。
使⽤建议:⼦类必须完全实现⽗类的⽅法,孩⼦类可以有⾃⼰的个性。覆盖或实现⽗类的⽅法 时,输⼊参数可以被放⼤,输出可以缩⼩
⽤例:跑步运动员类-会跑步,⼦类⻓跑运动员-会跑步且擅⻓⻓跑, ⼦类短跑运动员-会跑步且 擅⻓短跑
依赖倒置原则(Dependence Inversion Principle)
⾼层模块不应该依赖低层模块,两者都应该依赖其抽象. 不可分割的原⼦逻辑就是低层模式,原 ⼦逻辑组装成的就是⾼层模块。
模块间依赖通过抽象(接⼝)发⽣,具体类之间不直接依赖
使⽤建议:每个类都尽量有抽象类,任何类都不应该从具体类派⽣。尽量不要重写基类的⽅
法。结合⾥⽒替换原则使⽤。
⽤例:奔驰⻋司机类--只能开奔驰; 司机类 -- 给什么⻋,就开什么⻋; 开⻋的⼈:司机--依
赖于抽象
迪⽶特法则(Law of Demeter),⼜叫“最少知道法则”
尽量减少对象之间的交互,从⽽减⼩类之间的耦合。⼀个对象应该对其他对象有最少的了解。
对类的低耦合提出了明确的要求:
只和直接的朋友交流, 朋友之间也是有距离的。⾃⼰的就是⾃⼰的(如果⼀个⽅法放在本类
中,既不增加类间关系,也对本类不产⽣负⾯影响,那就放置在本类中)。
⽤例:⽼师让班⻓点名--⽼师给班⻓⼀个名单,班⻓完成点名勾选,返回结果,⽽不是班⻓点 名,⽼师勾选
接⼝隔离原则(Interface Segregation Principle)
客⼾端不应该依赖它不需要的接⼝,类间的依赖关系应该建⽴在最⼩的接⼝上
使⽤建议:接⼝设计尽量精简单⼀,但是不要对外暴露没有实际意义的接⼝。
⽤例:修改密码,不应该提供修改⽤⼾信息接⼝,⽽就是单⼀的最⼩修改密码接⼝,更不要暴 露数据库操作
从整体上来理解六⼤设计原则,可以简要的概括为⼀句话,⽤抽象构建框架,⽤实现扩展细节,具体 到每⼀条设计原则,则对应⼀条注意事项:
单⼀职责原则告诉我们实现类要职责单⼀;
⾥⽒替换原则告诉我们不要破坏继承体系;
依赖倒置原则告诉我们要⾯向接⼝编程;
接⼝隔离原则告诉我们在设计接⼝的时候要精简单⼀;
迪⽶特法则告诉我们要降低耦合;
开闭原则是总纲,告诉我们要对扩展开放,对修改关闭。
相关文章:
同步异步日志系统-设计模式
六大原则 单⼀职责原则(Single Responsibility Principle) 类的职责应该单⼀,⼀个⽅法只做⼀件事。职责划分清晰了,每次改动到最⼩单位的⽅法或 类。 使⽤建议:两个完全不⼀样的功能不应该放⼀个类中,⼀…...
DP-最长上升子序列
题面: 样例: 思路: 遇到动态规划问题,我们照旧思考两部分,状态表示以及状态计算。这里我们f[N]表示以第i个数结尾的上升子序列的最大值。我们将f[N]划分为若干个部分,因为我们要用到递推思路想办法用前面的…...
Spring Boot 中多线程工具类的配置与使用:基于 YAML 配置文件
文章目录 Spring Boot 中多线程工具类的配置与使用:基于 YAML 配置文件1. 为什么需要多线程工具类?2. 实现步骤2.1 添加依赖2.2 配置线程池参数2.3 创建配置类2.4 创建线程池工具类2.5 使用线程池工具类2.6 测试线程池工具类 3. 配置文件的灵活性4. 总结…...
mac安装Pyspark并连接Mysql
安装Scala, apache-spark, Hadoop brew install scala brew install apache-spark brew install hadoop pip install pyspark注意不要自己另外安装jdk, 会造成版本对不上报错。因为安装apache-spark的过程中会自动安装openjdk。 配置环境变量 JAVA_HOME/opt/homebrew/Cellar…...
【C++第二十章】红黑树
【C第二十章】红黑树 红黑树介绍🧐 红黑树是一种自平衡的二叉搜索树,通过颜色标记和特定规则保持树的平衡性,从而在动态插入、删除等操作中维持较高的效率。它的最长路径不会超过最短路径的两倍,它的查找效率比AVL树更慢(对于CPU…...
如何修改Windows系统Ollama模型存储位置
默认情况下,Ollama 模型会存储在 C 盘用户目录下的 .ollama/models 文件夹中,这会占用大量 C 盘空间,增加C盘“爆红”的几率。所以,我们就需要修改Ollama的模型存储位置 Ollama提供了一个环境变量参数可以修改Ollama的默认存在位…...
OpenAI ChatGPT在心理治疗领域展现超凡同理心,通过图灵测试挑战人类专家
近期,一项关于OpenAI ChatGPT在心理治疗领域的研究更是引起了广泛关注。据报道,ChatGPT已经成功通过了治疗师领域的图灵测试,其表现甚至在某些方面超越了人类治疗师,尤其是在展现同理心方面,这一发现无疑为AI在心理健康…...
Netflix Ribbon:云端负载均衡利器
Netflix Ribbon:云端负载均衡利器 ribbon Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support. 项目地…...
MAVSDK - Custom Mavlink处理
编译命令中开启 Custom Mavlink 编译 cmake -DCMAKE_BUILD_TYPERelease -DMAVLINK_DIALECTcustom -DBUILD_CUSTOM_MAVLINKON -DCUSTOM_MAVLINK_PATH"G:/Custom_Mavlink" -DBUILD_CUSTOM_PLUGINSON -DENABLED_CUSTOM_PLUGINS"speaker" -DENABLED_PLUGINS&qu…...
【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )
文章目录 一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后返回处理 二、悬浮窗 前台服务和通知1、前台服务 启动 悬浮窗 的必要性① 保持悬浮窗存活② 悬浮窗的要求③ 悬浮窗版本兼容 2、其它类型服务简介① 前台服务…...
Python高级语法之jsonpathBeautifulSoup解析器
目录: 1、jsonPath的使用2、使用jsonpath解析淘票票网页3、BeautifulSoup解析器的使用4、BeautifulSoup层级选择器的使用 1、jsonPath的使用 2、使用jsonpath解析淘票票网页 3、BeautifulSoup解析器的使用 4、BeautifulSoup层级选择器的使用...
工业安卓主板在智慧粮仓设备中发挥着至关重要的作用
工业安卓主板在智慧粮仓设备中发挥着至关重要的作用。以下是关于其作用的具体分析: 一、提供稳定可靠的运行平台 智慧粮仓设备需要长时间稳定运行,以实现对粮食储存环境的实时监测和精准控制。工业安卓主板采用高性能的处理器和大容量的存储空间&#…...
ECMAScript6----var、let、const
ECMAScript6----var、let、const 1.var2.let3.const 1.var (1)在相同作用域下可重复声明 var a 20 var a 30 console.log(a) // 30(2)存在变量提升 console.log(a) // undefined var a 20(3)可修改声…...
【ST-LINK未能被keil识别STM32 ST-LINK Utility出现“Can not connect to target】
针对各种品牌32MCU boot0拉高,boot1拉低进入系统存储器,对Flash先擦除在下载 针对STM32f103 通过32复位和stlink Utilit解决 https://blog.csdn.net/Donglutao/article/details/129086960 https://www.bilibili.com/video/BV1F94y1g7be/?spm_id_…...
Android Http-server 本地 web 服务
时间:2025年2月16日 地点:深圳.前海湾 需求 我们都知道 webview 可加载 URI,他有自己的协议 scheme: content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的,如果你想直接…...
用deepseek学大模型05逻辑回归
deepseek.com:逻辑回归的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点,及如何改进解决及改进方法数据推导。…...
python实践-实现实时语音转文字本地部署版(二)
一、技术栈 python 3.10.6 vosk 需下载对应模型(vosk-model-cn-0.22)模型下载慢的同学看最后的资源链接。 pyaudio keyboard 二、实现功能 本地化实现麦克风语音录入,实时生成文字,并保存至本地文档。 三、实现代码 fro…...
tortoiseSVN 如何克隆项目到本地
导入项目成功,如下图:...
解决“QString的split()函数分割中文“报错
在使用Qt平台的QString类里的split()函数,分割.txt文件里中文的字符串时,发现中文会乱码。 问题原因:中文使用UTF-16编码。 解决方法:将.txt文件保存为UTF-16编码,然后使用split()去分割对应的字符串即可。…...
云平台结合DeepSeek的AI模型优化实践:技术突破与应用革新
目录 前言 一、技术架构:算力与算法的协同基石 1. 蓝耘平台的核心优势 2. DeepSeek的模型创新 二、应用场景:垂直领域的智能化落地 1. 商业领域:智能推荐与客服 2. 工业领域:质检与流程优化 3. 智慧城市与医…...
蓝桥杯(B组)-每日一题(1093字符逆序)
c中函数: reverse(首位置,尾位置) reverse(s.begin(),s.end()) 头文件:<algorithm> #include<iostream> #include<algorithm>//运用reverse函数的头文件 using namespace std; int main() {string s;//定义一…...
jsherp importItemExcel接口存在SQL注入
一、漏洞简介 很多人说管伊佳ERP(原名:华夏ERP,英文名:jshERP)是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能,但后面将会推出ERP的全部功能,有兴趣请帮点一下 二、漏洞影响 …...
基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)
在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...
一文讲清 AIO BIO NIO的区别
引言 在 Java 编程中,BIO(Blocking I/O)、NIO(Non-blocking I/O)和 AIO(Asynchronous I/O)是三种不同的 I/O 模型,它们在处理输入输出操作时有着不同的机制和特点,但是市…...
Qt 中使用 ffmpeg 获取采集卡数据录制视频
作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 之前做了一个功能,从采集卡获取数据然后录制成视频,结果发现录制的视频内存占用非常大,1分钟的…...
用HTML5+CSS+JavaScript实现新奇挂钟动画
用HTML5+CSS+JavaScript实现新奇挂钟动画 引言 在技术博客中,如何吸引粉丝并保持他们的关注?除了干货内容,独特的视觉效果也是关键。今天,我们将通过HTML5、CSS和JavaScript实现一个新奇挂钟动画,并将其嵌入到你的网站中。这个动画不仅能让你的网站脱颖而出,还能展示你的…...
一周学会Flask3 Python Web开发-redirect重定向
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们学过渲染到模板页面,这个其实是一种内部的转发,浏览器地址栏地址没有变化。如果我们想重定向…...
如何在 ConstraintLayout 中将 ViewPager 始终置于 ll_title 的下方
关于如何在 ConstraintLayout 中将 ViewPager 始终置于 ll_title标题栏 的下方。。 如何将 ViewPager 始终置于 ll_title 下方 在 ConstraintLayout 中,可以通过约束来实现 ViewPager 始终位于 ll_title 标题栏的下方。以下是修改后的布局代码: <?…...
文心一言大模型的“三级跳”:从收费到免费再到开源,一场AI生态的重构实验
2025年2月,百度文心大模型接连抛出两枚“重磅炸弹”:4月1日起全面免费,6月30日正式开源文心大模型4.5系列。这一系列动作不仅颠覆了李彦宏此前坚持的“闭源优势论”13,更标志着中国AI大模型竞争进入了一个全新的阶段——从技术壁垒…...
IPv6报头40字节具体怎么分配的?
目录 IPv6报头结构 字段详解 示例代码:IPv6报头的Python实现 输出示例 IPv6协议是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。与IPv4相比,IPv6不仅提供了更大的地址空间,还简化了报头结构,提高了网络设备的处理效率。…...
