一表总结 Java 的3种设计模式与6大设计原则
设计模式通常分为三大类:创建型、结构型和行为型。
- 创建型模式:主要用于解决对象创建问题
- 结构型模式:主要用于解决对象组合问题
- 行为型模式:主要用于解决对象之间的交互问题
创建型模式
创建型模式关注于对象的创建机制,提供了创建对象的灵活性。以下是Java中的创建型设计模式:
| 类型 | 具体名称 | 特点 |
|---|---|---|
| 创建型 | 单例模式 | 确保一个类只有一个实例,并提供一个全局访问点。 |
| 创建型 | 工厂方法模式 | 定义一个接口用于创建对象,但由子类决定实例化哪个类。 |
| 创建型 | 抽象工厂模式 | 提供一个接口,用于创建相关或依赖对象的家族。 |
| 创建型 | 建造者模式 | 使用多个简单的对象一步步构建一个复杂的对象。 |
| 创建型 | 原型模式 | 通过复制现有的实例来创建新的实例。 |
结构型模式
结构型模式关注于如何将类或对象组合成更大的结构。以下是Java中的结构型设计模式:
| 类型 | 具体名称 | 特点 |
|---|---|---|
| 结构型 | 适配器模式 | 将一个类的接口转换成客户端所期望的另一种接口。 |
| 结构型 | 装饰器模式 | 动态地给对象添加额外的职责。 |
| 结构型 | 代理模式 | 为其他对象提供一种代理以控制对这个对象的访问。 |
| 结构型 | 组合模式 | 将对象组合成树形结构以表示“部分-整体”的层次结构。 |
| 结构型 | 外观模式 | 为子系统中的一组接口提供一个统一的高层接口。 |
| 结构型 | 桥接模式 | 将抽象部分与实现部分分离,使它们可以独立变化。 |
| 结构型 | 享元模式 | 通过共享对象来有效地支持大量细粒度的对象。 |
行为型模式
行为型模式关注于对象之间的通信、交互。以下是Java中的行为型设计模式:
| 类型 | 具体名称 | 特点 |
|---|---|---|
| 行为型 | 观察者模式 | 定义了一种一对多的依赖关系,状态改变时自动更新。 |
| 行为型 | 策略模式 | 定义了一系列算法,并将每一个算法封装起来。 |
| 行为型 | 命令模式 | 将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。 |
| 行为型 | 状态模式 | 允许一个对象在其内部状态改变时改变其行为。 |
| 行为型 | 责任链模式 | 将请求的发送者和接收者解耦,通过一系列处理对象来处理请求。 |
| 行为型 | 备忘录模式 | 捕获对象的内部状态,以便在未来恢复。 |
| 行为型 | 迭代器模式 | 提供一种方法顺序访问一个集合对象中的元素。 |
| 行为型 | 访问者模式 | 在不改变元素类的前提下定义作用于这些元素的新操作。 |
| 行为型 | 中介者模式 | 通过一个中介者对象来封装一系列的对象交互。 |
| 行为型 | 解释器模式 | 定义一种语言的文法表示,并定义一个解释器来处理该语言。 |
| 行为型 | 过滤器模式 | 允许通过一系列的处理对象来过滤请求。 |
六大设计原则
| 名称 | 特点 |
|---|---|
| 单一职责原则(SRP) | 一个类应该只有一个引起它变化的原因。也就是说,一个类只应该有一个职责。 |
| 开放-关闭原则(OCP) | 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即通过添加新代码扩展功能,而不是修改现有代码。 |
| 里氏替换原则(LSP) | 子类对象应该能够替换父类对象,程序的功能不受影响。即子类必须能够完全替代父类。 |
| 接口隔离原则(ISP) | 一个类对另一个类的依赖应该建立在最小的接口上。即客户端不应该依赖它不需要的接口。 |
| 依赖倒置原则(DIP) | 高层模块不应该依赖低层模块,二者都应该依赖抽象。即应该依赖于接口而不是具体实现。 |
| 合成复用原则(CRP) | 尽量使用组合/聚合的方式,而不是使用继承。即优先选择组合而不是继承来实现代码复用。 |
汇总表格
| 类型 | 具体名称 | 特点 |
|---|---|---|
| 创建型 | 单例模式 | 确保一个类只有一个实例,并提供一个全局访问点。 |
| 工厂方法模式 | 定义一个接口用于创建对象,但由子类决定实例化哪个类。 | |
| 抽象工厂模式 | 提供一个接口,用于创建相关或依赖对象的家族。 | |
| 建造者模式 | 使用多个简单的对象一步步构建一个复杂的对象。 | |
| 原型模式 | 通过复制现有的实例来创建新的实例。 | |
| 结构型 | 适配器模式 | 将一个类的接口转换成客户端所期望的另一种接口。 |
| 装饰器模式 | 动态地给对象添加额外的职责。 | |
| 代理模式 | 为其他对象提供一种代理以控制对这个对象的访问。 | |
| 组合模式 | 将对象组合成树形结构以表示“部分-整体”的层次结构。 | |
| 外观模式 | 为子系统中的一组接口提供一个统一的高层接口。 | |
| 桥接模式 | 将抽象部分与实现部分分离,使它们可以独立变化。 | |
| 享元模式 | 通过共享对象来有效地支持大量细粒度的对象。 | |
| 行为型 | 观察者模式 | 定义了一种一对多的依赖关系,状态改变时自动更新。 |
| 策略模式 | 定义了一系列算法,并将每一个算法封装起来。 | |
| 命令模式 | 将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。 | |
| 状态模式 | 允许一个对象在其内部状态改变时改变其行为。 | |
| 责任链模式 | 将请求的发送者和接收者解耦,通过一系列处理对象来处理请求。 | |
| 备忘录模式 | 捕获对象的内部状态,以便在未来恢复。 | |
| 迭代器模式 | 提供一种方法顺序访问一个集合对象中的元素。 | |
| 访问者模式 | 在不改变元素类的前提下定义作用于这些元素的新操作。 | |
| 中介者模式 | 通过一个中介者对象来封装一系列的对象交互。 | |
| 解释器模式 | 定义一种语言的文法表示,并定义一个解释器来处理该语言。 | |
| 过滤器模式 | 允许通过一系列的处理对象来过滤请求。 |
相关文章:
一表总结 Java 的3种设计模式与6大设计原则
设计模式通常分为三大类:创建型、结构型和行为型。 创建型模式:主要用于解决对象创建问题结构型模式:主要用于解决对象组合问题行为型模式:主要用于解决对象之间的交互问题 创建型模式 创建型模式关注于对象的创建机制…...
Hive on Spark优化
文章目录 第1章集群环境概述1.1 集群配置概述1.2 集群规划概述 第2章 Yarn配置2.1 Yarn配置说明2.2 Yarn配置实操 第3章 Spark配置3.1 Executor配置说明3.1.1 Executor CPU核数配置3.1.2 Executor内存配置3.1.3 Executor个数配置 3.2 Driver配置说明3.3 Spark配置实操 第4章 Hi…...
Java集合面试总结(题目来源JavaGuide)
问题1:说说 List,Set,Map 三者的区别? 在 Java 中,List、Set 和 Map 是最常用的集合框架(Collection Framework)接口,它们的主要区别如下: 1. List(列表) 特点…...
计算机网络 应用层 笔记1(C/S模型,P2P模型,FTP协议)
应用层概述: 功能: 常见协议 应用层与其他层的关系 网络应用模型 C/S模型: 优点 缺点 P2P模型: 优点 缺点 DNS系统: 基本功能 系统架构 域名空间: DNS 服务器 根服务器: 顶级域…...
ES6基础内容
ES 全称 EcmaScript ,是脚本语言的规范,而平时经常编写的 JavaScript 是 EcmaScript 的一种实现,所以 ES 新特性其实指的就是 JavaScript 的新特性。 一、 let变量声明和声明特性 1.1 变量声明 <!DOCTYPE html> <html lang"en">…...
DeepSeek本地部署的一些使用体会
春节期间我也尝试了一下Deepseek的本地部署,方案选用了Ollama Chatbox或AnythingLLM。Chatbox里有很多有意思的“助手”,而AnythingLLM支持本地知识库。 网上教程很多,总的来说还是很方便的,不需要费太多脑子。甚至可以这么说&a…...
鲸鱼算法 matlab pso
算法原理 鲸鱼优化算法的核心思想是通过模拟座头鲸的捕食过程来进行搜索和优化。座头鲸在捕猎时会围绕猎物游动并产生气泡网,迫使猎物聚集。这一行为被用来设计搜索策略,使算法能够有效地找到全局最优解。 算法步骤 初始化:随机生成一…...
013-51单片机红外遥控器模拟控制空调,自动制冷制热定时开关
主要功能是通过红外遥控器模拟控制空调,可以实现根据环境温度制冷和制热,能够通过遥控器设定温度,可以定时开关空调。 1.硬件介绍 硬件是我自己设计的一个通用的51单片机开发平台,可以根据需要自行焊接模块,这是用立创…...
在Vue3 + Vite 项目中使用 Tailwind CSS 4.0
文章目录 首先是我的package.json根据官网步骤VS Code安装插件验证是否引入成功参考资料 首先是我的package.json {"name": "aplumweb","private": true,"version": "0.0.0","type": "module","s…...
Leetcode—922. 按奇偶排序数组 II【简单】
2025每日刷题(207) Leetcode—922. 按奇偶排序数组 II 实现代码 class Solution { public:vector<int> sortArrayByParityII(vector<int>& nums) {for(int i 0, j 1; i < nums.size() - 1; i 2) {// 前奇后偶if(nums[i] % 2) {w…...
一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
一、GenBI AI 代理介绍(文末提供下载) github地址:https://github.com/Canner/WrenAI 本文信息图片均来源于github作者主页 在 Wren AI,我们的使命是通过生成式商业智能 (GenBI) 使组织能够无缝访问数据&…...
使用Posix共享内存区实现进程间通信
使用Posix共享内存区实现进程间通信 使用Posix共享内存区通常涉以下步骤: 进程A 调用shm_open 创建共享内存区进程A调用ftruncate修改共享内存区大小进程A 调用mmap将共享内存区映射到进程地址空间ptrA进程A 使用ptrA对共享内存区进程更改进程B 使用shm_open打开已有共享内存…...
家政预约小程序12服务详情
目录 1 修改数据源2 创建页面3 搭建轮播图4 搭建基本信息5 显示服务规格6 搭建服务描述7 设置过滤条件总结 我们已经在首页、分类页面显示了服务的列表信息,当点击服务的内容时候需要显示服务的详情信息,本篇介绍一下详情页功能的搭建。 1 修改数据源 在…...
【C语言】指针详细解读2
1.const 修饰指针 1.1 const修饰变量 变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。 但是如果我们希望⼀个变量加上⼀些限制,不能被修改,怎么做呢?这就是const的作⽤。 #in…...
MongoDB 聚合
MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。 有点类似 SQL 语句中的 count(*)。 aggregate() 方法 MongoDB中聚合的方法使用aggregate()。 语法 aggregate() 方法的基本语法格式如下所示࿱…...
LabVIEW涡轮诊断系统
一、项目背景与行业痛点 涡轮机械是发电厂、航空发动机、石油化工等领域的核心动力设备,其运行状态直接关系到生产安全与经济效益。据统计,涡轮故障导致的非计划停机可造成每小时数十万元的经济损失,且突发故障可能引发严重安全事故。传统人…...
机器学习在地震预测中的应用
## 1. 机器学习与地震预测 地震是自然界的一种极端灾害,其发生常常给人们的生命和财产带来极大的威胁。虽然科学家们一直在寻求可靠的方法来预测地震,但由于地震预测本身的复杂性,长期以来难以取得根本性突破。然而,近年来&#x…...
总结11..
#include <stdio.h> #include <string.h> #define MAXN 1001 #define MAXM 1000001 int n, m; char maze[MAXN][MAXN]; int block[MAXN][MAXN]; // 标记每个格子所属的连通块编号 int blockSize[MAXN * MAXN]; // 记录每个连通块的大小 int dx[] {0, 0, 1, -1};…...
c++ 定点 new 及其汇编解释
(1) 代码距离: #include <new> // 需要包含这个头文件 #include <iostream>int main() {char buffer[sizeof(int)]; // 分配一个足够大的字符数组作为内存池int* p new(&buffer) int(42); // 使用 placement new…...
Linux 传输层协议 UDP 和 TCP
UDP 协议 UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度如果校验和出错, 就会直接丢弃 UDP 的特点 UDP 传输的过程类似于寄信 . 无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制; 如果因…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
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…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
