设计模式学习(1)

面向对象设计原则

单一职责

每个类只有一个职责,并被完整的封装在类中,该原则用来控制类的粒度。

例如Mapper,controller都只负责一个业务。

开闭原则

应该对扩展开放,而对修改封闭,例如定义接口或是抽象类作为抽象层,其具体层子类可以多种多样。

里氏替换原则

子类只能扩展父类的功能,不能修改父类的功能。

依赖倒转原则

高层不应该依赖于底层,而是应该依赖于抽象,防止代码之间出现强关联强耦合,因此在Spring框架中使用的是接口定义职责,这样高层只需关注接口定义的方法,不用关心实现类,有框架自动管理。

接口隔离原则

接口的划分应该注意粒度,不要让一些类实现不必要的接口方法,如果出现一个实体类实现接口后,方法无意义,就应该进一步划分接口

合成复用原则

如果需要复用某个类的功能,优先考虑将其引入本类内部作为类的内部成员或是作为参数传入,而不是去继承,进一步降低耦合度,也防止A的实现细节暴露导致不安全。

迪米特原则(最小知识原则)

每个类或模块应该对其他类有着最小的知识或是最小的交互,降低耦合度。

创建型设计模式

工厂方法模式

如果直接使用new方式进行创建对象,不仅麻烦一旦出现改动,可能导致需要修改大量代码,如果使用工厂模式,由工厂进行创建则只需要修改工程中的代码即可,同时有些对象的创建可能需要参数,不是简单new即可。

简单工厂模式(不符合开闭原则),如果增加类,则需要修改工厂方法。

因此改进为工厂方法模型,将生产实体类作为一种职责,变化到抽象层,具体的实体类对应具体层实现。

抽象工厂模式

如果有多个个产品族,每个都创建一个工厂就不方便,因此直接创建一个抽象的顶层工厂,具体的产品族进行不同的实现,但是缺点在于违背了开闭原则,如果产品族中新增产品就需要修改抽象层。

建造者模式

建立一个Builder类,对需要创建的对象进行配置,最后在创建,注重的是一步一步配置的过程,且构造方法参数过多时应该使用,此时应该将类的全参构造方法设为私有,用建造者类进行配置

builder自身也应该保存参数,支持链式调用,build()处进行调用全参构造方法传入设定好的所有参数。

单例模式

就是只用一个实例的情况下,无需创建太多实体对象,使用一个或者静态方法就能满足需求。

饿汉

懒汉式(懒加载)

线程不安全,可能导致创建多个对象。

加锁版本,加锁后应该还要判断,否则可能有多个线程都已经判空并在等锁,导致创建多次

还需要再INSTANCE上加上volatile,以保证该对象在线程中的可见性

最优解是使用另一个静态内部类持有实例对象,既延迟加载又线程安全。

原型模式

使用原型对象进行拷贝生成新的对象(深拷贝),不能直接使用Java的拷贝方法,而是应该重写实现深拷贝,

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

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

相关文章

在 Rocky Linux 9.2 上编译安装 Redis 6.2.6

文章目录 在 Rocky Linux 9.2 上编译安装 Redis 6.2.6Redis 介绍官网Redis 的核心特性高性能支持多种数据结构多种持久化机制复制与高可用2.5 事务与 Lua 脚本消息队列功能 Redis 适用场景Redis 与其他数据库对比Redis 的优势与劣势Redis 优势Redis 劣势 部署过程系统环境信息环…

量子计算与经典计算的融合与未来

最近研学过程中发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击下方超链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面进入文章正…

数据结构(4)——带哨兵位循环双向链表

目录 前言 一、带哨兵的循环双向链表是什么 二、链表的实现 2.1规定结构体 2.2创建节点 2.3初始化 2.4打印 2.5检验是否为空 2.6销毁链表 2.7尾插 2.8尾删 2.9头插 2.10头删 2.11寻找特定节点 2.12任意位置插入(pos前) 2.13删除任意节点 …

Github 2025-03-30 php开源项目日报 Top10

根据Github Trendings的统计,今日(2025-03-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10TypeScript项目1Coolify: 开源自助云平台 创建周期:1112 天开发语言:PHP, Blade协议类型:Apache License 2.0Star数量:10527 个Fo…

3. 线程间共享数据

1. 线程共享数据会造成什么问题? 1.1 读写不一致 多线程读不会造成数据变动,所以没有问题。只要有一个线程设计修改数据,就会导致数据共享出现问题,简单的是数据不一致,严重的是程序访问已经释放的内存,造…

JAVA垃圾回收算法和判断垃圾的算法

一、判断垃圾的算法 判断对象是否为垃圾的核心是确定对象是否不再被使用。Java主要采用以下两种算法: 1. 引用计数法(Reference Counting) 原理:每个对象维护一个引用计数器,记录被引用的次数。当引用被添加时计数器…

界面架构 - MVVM (Qt)

MVVM MVVM 的主要特点示例示例功能示例代码ViewModel 类(C)主函数入口(main.cpp) QML 文件(main.qml)总结 MVVM(Model-View-ViewModel)架构是一种旨在进一步分离界面和业务逻辑的设计…

第十四届MathorCup高校数学建模挑战赛-C题:基于 LSTM-ARIMA 和整数规划的货量预测与人员排班模型

目录 摘要 一、 问题重述 1.1 背景知识 1.2 问题描述 二、 问题分析 2.1 对问题一的分析 2.2 对问题二的分析 2.3 对问题三的分析 2.4 对问题四的分析 三、 模型假设 四、 符号说明 五、 问题一模型的建立与求解 5.1 数据预处理 5.2 基于 LSTM 的日货量预测模型 5.3 日货量预测…

银河麒麟V10 aarch64架构安装mysql教程

国产操作系统 ky10.aarch64 因为是arm架构,故选择mysql8,推荐安装8.0.28版本 尝试8.0.30和8.0.41版本均未成功,原因不明☹️ 1. 准备工作 ⏬ 下载地址:https://downloads.mysql.com/archives/community/ 2. 清理历史环境 不用管…

C++多继承

可以用多个基类来派生一个类。 格式为: class 类名:类名1,…, 类名n { private: … ; //私有成员说明; public: … ; //公有成员说明; protected: … ; //保护的成员说明; }; class D: public A, protected B, private C { …//派…

某地老旧房屋自动化监测项目

1. 项目简介 自从上个世纪90年代以来,我国经济发展迅猛,在此期间大量建筑平地而起,并且多为砖混结构的住房,使用寿命通常约为30-50年,钢筋混凝土结构,钢结构等高层建筑,这些建筑在一般情况下的…

产品经理的大语言模型课 04 -模型应用的云、边、端模式对比

目录 算力部署方式的影响因素数据量计算难度前期投入数据隐私应用规模与泛化能力 云、边、端部署的特点和对比典型场景举例社区人脸门禁后厨老鼠识别 未来展望 算力部署方式的影响因素 最近和人工智能从业者进行了非常广泛的沟通,尝试对模型应用的云、边、端模式进…

基于Python设计的TEQC数据质量可视化分析软件

标题:基于Python设计的TEQC数据质量可视化分析软件 内容:1.摘要 本文旨在设计一款基于Python的TEQC数据质量可视化分析软件。随着全球导航卫星系统(GNSS)的广泛应用,数据质量的评估变得至关重要。TEQC(TransEditQualityCheck&…

Flinksql--订单宽表

参考: https://chbxw.blog.csdn.net/article/details/115078261 (datastream 实现) 一、ODS 模拟订单表及订单明细表 CREATE TABLE orders (order_id STRING,user_id STRING,order_time TIMESTAMP(3),-- 定义事件时间及 Watermark(允许5秒乱序&#x…

粒子滤波介绍

目录 粒子滤波的主要流程可以分为以下 5 个步骤: 粒子滤波(PF) vs. ESKF(误差状态卡尔曼滤波) 粒子滤波的主要流程可以分为以下 5 个步骤: 初始化(Initialization) 生成 N 个粒子&…

一场国际安全厂商的交流会议简记

今天参与了一场国际安全厂商A公司组织的交流会议 与会有国际TOP企业跨境企业 还有国内一些头部商业公司。 A公司很有意思介绍了自己是怎么做安全运营中心SOC的。 介绍了很多内容,包括他们自己的员工量/设备量/事件量/SOC中心人员量,其中人员量只有个位数…

Java面试黄金宝典30

1. 请详细列举 30 条常用 SQL 优化方法 定义 SQL 优化是指通过对 SQL 语句、数据库表结构、索引等进行调整和改进,以提高 SQL 查询的执行效率,减少系统资源消耗,提升数据库整体性能的一系列操作。 要点 从索引运用、查询语句结构优化、数据…

花洒洗澡完毕并关闭后过段时间会突然滴水的原因探究

洗澡完毕后的残留水 在洗澡的过程中,我们通常会使用到大量的水。这些水会通过花洒管子到达花洒顶喷流出。由于大顶喷花洒的喷头较大,关闭后里面的存水会更多。 气压失衡后的滴水 当花洒关闭后,内部的水管和花洒头中仍存有一定量的水。由于…

QSettings用法实战(相机配置文件的写入和读取)

很多情况,在做项目开发的时候,将参数独立出来是比较好的方法 例如:相机的曝光次数、曝光时长等参数,独立成ini文件,用户可以在外面修改即可生效,无需在动代码重新编译等工作 QSettings便可以实现该功能 内…

运维培训班之最佳选择(The best Choice for Operation and Maintenance Training Courses)

运维培训班之最佳选择 从面试官的角度聊聊培训班对运维的帮助,同时给培训班出身的运维一些建议~ 谈到运维(尤其是零基础非科班转行的运维)找工作,培训班是个不可回避的讨论热点。虽然本人也做过兼职运维培训老师,多少…