当前位置: 首页 > news >正文

一表总结 Java 的3种设计模式与6大设计原则

设计模式通常分为三大类:创建型、结构型和行为型。

  • 创建型模式:主要用于解决对象创建问题
  • 结构型模式:主要用于解决对象组合问题
  • 行为型模式:主要用于解决对象之间的交互问题

创建型模式

创建型模式关注于对象的创建机制,提供了创建对象的灵活性。以下是Java中的创建型设计模式:

类型具体名称特点
创建型单例模式确保一个类只有一个实例,并提供一个全局访问点。
创建型工厂方法模式定义一个接口用于创建对象,但由子类决定实例化哪个类。
创建型抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族。
创建型建造者模式使用多个简单的对象一步步构建一个复杂的对象。
创建型原型模式通过复制现有的实例来创建新的实例。

结构型模式

结构型模式关注于如何将类或对象组合成更大的结构。以下是Java中的结构型设计模式:

类型具体名称特点
结构型适配器模式将一个类的接口转换成客户端所期望的另一种接口。
结构型装饰器模式动态地给对象添加额外的职责。
结构型代理模式为其他对象提供一种代理以控制对这个对象的访问。
结构型组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。
结构型外观模式为子系统中的一组接口提供一个统一的高层接口。
结构型桥接模式将抽象部分与实现部分分离,使它们可以独立变化。
结构型享元模式通过共享对象来有效地支持大量细粒度的对象。

行为型模式

行为型模式关注于对象之间的通信、交互。以下是Java中的行为型设计模式:

类型具体名称特点
行为型观察者模式定义了一种一对多的依赖关系,状态改变时自动更新。
行为型策略模式定义了一系列算法,并将每一个算法封装起来。
行为型命令模式将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。
行为型状态模式允许一个对象在其内部状态改变时改变其行为。
行为型责任链模式将请求的发送者和接收者解耦,通过一系列处理对象来处理请求。
行为型备忘录模式捕获对象的内部状态,以便在未来恢复。
行为型迭代器模式提供一种方法顺序访问一个集合对象中的元素。
行为型访问者模式在不改变元素类的前提下定义作用于这些元素的新操作。
行为型中介者模式通过一个中介者对象来封装一系列的对象交互。
行为型解释器模式定义一种语言的文法表示,并定义一个解释器来处理该语言。
行为型过滤器模式允许通过一系列的处理对象来过滤请求。

六大设计原则

名称特点
单一职责原则(SRP)一个类应该只有一个引起它变化的原因。也就是说,一个类只应该有一个职责。
开放-关闭原则(OCP)软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即通过添加新代码扩展功能,而不是修改现有代码。
里氏替换原则(LSP)子类对象应该能够替换父类对象,程序的功能不受影响。即子类必须能够完全替代父类。
接口隔离原则(ISP)一个类对另一个类的依赖应该建立在最小的接口上。即客户端不应该依赖它不需要的接口。
依赖倒置原则(DIP)高层模块不应该依赖低层模块,二者都应该依赖抽象。即应该依赖于接口而不是具体实现。
合成复用原则(CRP)尽量使用组合/聚合的方式,而不是使用继承。即优先选择组合而不是继承来实现代码复用。

汇总表格

类型具体名称特点
创建型单例模式确保一个类只有一个实例,并提供一个全局访问点。
工厂方法模式定义一个接口用于创建对象,但由子类决定实例化哪个类。
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族。
建造者模式使用多个简单的对象一步步构建一个复杂的对象。
原型模式通过复制现有的实例来创建新的实例。
结构型适配器模式将一个类的接口转换成客户端所期望的另一种接口。
装饰器模式动态地给对象添加额外的职责。
代理模式为其他对象提供一种代理以控制对这个对象的访问。
组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。
外观模式为子系统中的一组接口提供一个统一的高层接口。
桥接模式将抽象部分与实现部分分离,使它们可以独立变化。
享元模式通过共享对象来有效地支持大量细粒度的对象。
行为型观察者模式定义了一种一对多的依赖关系,状态改变时自动更新。
策略模式定义了一系列算法,并将每一个算法封装起来。
命令模式将请求封装为一个对象,从而使您可以用不同的请求对客户进行参数化。
状态模式允许一个对象在其内部状态改变时改变其行为。
责任链模式将请求的发送者和接收者解耦,通过一系列处理对象来处理请求。
备忘录模式捕获对象的内部状态,以便在未来恢复。
迭代器模式提供一种方法顺序访问一个集合对象中的元素。
访问者模式在不改变元素类的前提下定义作用于这些元素的新操作。
中介者模式通过一个中介者对象来封装一系列的对象交互。
解释器模式定义一种语言的文法表示,并定义一个解释器来处理该语言。
过滤器模式允许通过一系列的处理对象来过滤请求。

相关文章:

一表总结 Java 的3种设计模式与6大设计原则

设计模式通常分为三大类:创建型、结构型和行为型。 创建型模式:主要用于解决对象创建问题结构型模式:主要用于解决对象组合问题行为型模式:主要用于解决对象之间的交互问题 创建型模式 创建型模式关注于对象的创建机制&#xf…...

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(列表) 特点&#xf…...

计算机网络 应用层 笔记1(C/S模型,P2P模型,FTP协议)

应用层概述: 功能: 常见协议 应用层与其他层的关系 网络应用模型 C/S模型: 优点 缺点 P2P模型: 优点 缺点 DNS系统: 基本功能 系统架构 域名空间: DNS 服务器 根服务器: 顶级域…...

ES6基础内容

ES 全称 EcmaScript ,是脚本语言的规范&#xff0c;而平时经常编写的 JavaScript 是 EcmaScript 的一种实现&#xff0c;所以 ES 新特性其实指的就是 JavaScript 的新特性。 一、 let变量声明和声明特性 1.1 变量声明 <!DOCTYPE html> <html lang"en">…...

DeepSeek本地部署的一些使用体会

春节期间我也尝试了一下Deepseek的本地部署&#xff0c;方案选用了Ollama Chatbox或AnythingLLM。Chatbox里有很多有意思的“助手”&#xff0c;而AnythingLLM支持本地知识库。 网上教程很多&#xff0c;总的来说还是很方便的&#xff0c;不需要费太多脑子。甚至可以这么说&a…...

鲸鱼算法 matlab pso

算法原理 鲸鱼优化算法的核心思想是通过模拟座头鲸的捕食过程来进行搜索和优化。座头鲸在捕猎时会围绕猎物游动并产生气泡网&#xff0c;迫使猎物聚集。这一行为被用来设计搜索策略&#xff0c;使算法能够有效地找到全局最优解。 算法步骤 ‌初始化‌&#xff1a;随机生成一…...

013-51单片机红外遥控器模拟控制空调,自动制冷制热定时开关

主要功能是通过红外遥控器模拟控制空调&#xff0c;可以实现根据环境温度制冷和制热&#xff0c;能够通过遥控器设定温度&#xff0c;可以定时开关空调。 1.硬件介绍 硬件是我自己设计的一个通用的51单片机开发平台&#xff0c;可以根据需要自行焊接模块&#xff0c;这是用立创…...

在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每日刷题&#xff08;207&#xff09; 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 代理介绍&#xff08;文末提供下载&#xff09; github地址&#xff1a;https://github.com/Canner/WrenAI 本文信息图片均来源于github作者主页 在 Wren AI&#xff0c;我们的使命是通过生成式商业智能 &#xff08;GenBI&#xff09; 使组织能够无缝访问数据&…...

使用Posix共享内存区实现进程间通信

使用Posix共享内存区实现进程间通信 使用Posix共享内存区通常涉以下步骤: 进程A 调用shm_open 创建共享内存区进程A调用ftruncate修改共享内存区大小进程A 调用mmap将共享内存区映射到进程地址空间ptrA进程A 使用ptrA对共享内存区进程更改进程B 使用shm_open打开已有共享内存…...

家政预约小程序12服务详情

目录 1 修改数据源2 创建页面3 搭建轮播图4 搭建基本信息5 显示服务规格6 搭建服务描述7 设置过滤条件总结 我们已经在首页、分类页面显示了服务的列表信息&#xff0c;当点击服务的内容时候需要显示服务的详情信息&#xff0c;本篇介绍一下详情页功能的搭建。 1 修改数据源 在…...

【C语言】指针详细解读2

1.const 修饰指针 1.1 const修饰变量 变量是可以修改的&#xff0c;如果把变量的地址交给⼀个指针变量&#xff0c;通过指针变量的也可以修改这个变量。 但是如果我们希望⼀个变量加上⼀些限制&#xff0c;不能被修改&#xff0c;怎么做呢&#xff1f;这就是const的作⽤。 #in…...

MongoDB 聚合

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值&#xff0c;求和等)&#xff0c;并返回计算后的数据结果。 有点类似 SQL 语句中的 count(*)。 aggregate() 方法 MongoDB中聚合的方法使用aggregate()。 语法 aggregate() 方法的基本语法格式如下所示&#xff1…...

LabVIEW涡轮诊断系统

一、项目背景与行业痛点 涡轮机械是发电厂、航空发动机、石油化工等领域的核心动力设备&#xff0c;其运行状态直接关系到生产安全与经济效益。据统计&#xff0c;涡轮故障导致的非计划停机可造成每小时数十万元的经济损失&#xff0c;且突发故障可能引发严重安全事故。传统人…...

机器学习在地震预测中的应用

## 1. 机器学习与地震预测 地震是自然界的一种极端灾害&#xff0c;其发生常常给人们的生命和财产带来极大的威胁。虽然科学家们一直在寻求可靠的方法来预测地震&#xff0c;但由于地震预测本身的复杂性&#xff0c;长期以来难以取得根本性突破。然而&#xff0c;近年来&#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 及其汇编解释

&#xff08;1&#xff09; 代码距离&#xff1a; #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 和端口号就直接进行传输, 不需要建立连接不可靠: 没有确认机制, 没有重传机制; 如果因…...

COMSOL—超声相控阵聚焦仿真 模型介绍:激励函数是由高斯波和正弦波组成的脉冲函数

COMSOL—超声相控阵聚焦仿真 模型介绍&#xff1a;激励函数是由高斯波和正弦波组成的脉冲函数超声相控阵这玩意儿在工业检测和医学影像里玩得可溜了&#xff0c;今天咱们整点硬核的——用COMSOL搞个带高斯调制的超声聚焦仿真。先看这个模型的灵魂所在&#xff1a;激励信号设计。…...

Spigot服务器搭建后,别忘了做这5件事:优化、备份、插件与安全基础设置

Spigot服务器搭建后必做的5项关键优化与安全设置 当你第一次看到Spigot服务器成功启动时&#xff0c;那种成就感确实令人兴奋。但很快你会发现&#xff0c;一个能运行的基础服务器和真正稳定、高效、安全的游戏环境之间&#xff0c;还有不小的距离。很多新手服主在这个阶段容易…...

【STM32-HAL库】火焰传感器实战:从原理到智能火灾预警系统搭建(基于STM32F407ZGT6)

1. 火焰传感器原理与选型指南 火焰传感器作为火灾预警系统的"眼睛"&#xff0c;其核心原理是利用光电效应检测火焰特有的光谱特征。我经手过的工业项目中&#xff0c;90%的火灾误报都源于传感器选型不当。市面上常见的火焰传感器主要分为三类&#xff1a; 红外型&…...

WPF图片处理避坑指南:Image控件Stretch属性的4种模式详解(含效果对比图)

WPF图片处理避坑指南&#xff1a;Image控件Stretch属性的4种模式详解 刚接触WPF开发的工程师们&#xff0c;是否经常遇到图片显示变形、比例失调的困扰&#xff1f;Image控件的Stretch属性看似简单&#xff0c;却藏着不少设计哲学。今天我们就来彻底拆解这个影响图片显示效果的…...

火狐浏览器必备:Z-Library Finder扩展安装与使用全攻略(附最新下载链接)

火狐浏览器高效获取电子书资源&#xff1a;Z-Library Finder扩展深度指南 在数字阅读日益普及的今天&#xff0c;电子书资源获取工具成为许多阅读爱好者的刚需。对于火狐浏览器用户而言&#xff0c;Z-Library Finder扩展无疑是一款能够极大提升电子书搜索效率的神器。这款工具专…...

档案宝 档案管理系统怎么样?为什么企业选择他?

在当今信息化高速发展的时代&#xff0c;企业档案管理已经从传统的纸质化时代迈向了数字化、智能化的新阶段。随着企业规模的不断扩大和业务类型的日益复杂&#xff0c;档案管理面临着前所未有的挑战&#xff1a;档案数量激增、查找困难、存储空间紧张、安全隐患突出等问题严重…...

MongoDB开发者必备:Dbeaver旗舰版的地理空间数据操作全攻略

MongoDB开发者必备&#xff1a;Dbeaver旗舰版的地理空间数据操作全攻略 在位置服务(LBS)应用爆发的时代&#xff0c;地理空间数据处理能力已成为开发者核心技能。无论是共享经济中的车辆调度&#xff0c;还是电商平台的附近推荐&#xff0c;精准的地理查询直接影响用户体验。作…...

别再傻傻用二维数组存大矩阵了!手把手教你用C++实现稀疏矩阵的三元组压缩(附完整代码)

稀疏矩阵高效存储实战&#xff1a;从三元组压缩到十字链表的C实现 当你在处理一个1000010000的矩阵&#xff0c;却发现其中99%的元素都是零时&#xff0c;传统的二维数组存储方式就像用集装箱运输几颗散落的珍珠——浪费了巨大的空间和运输成本。这种"稀疏"场景在科学…...

OmenSuperHub:惠普游戏本性能控制终极指南 - 开源替代方案全面解析

OmenSuperHub&#xff1a;惠普游戏本性能控制终极指南 - 开源替代方案全面解析 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为惠普Omen Gaming Hub的臃肿体积和隐私担忧而烦恼吗&#xff1f;OmenSuperHub为你提供了一…...

基于ATP的10kV并联电容暂态过程仿真

基于ATP的10kV并联电容暂态过程仿真在电力系统中&#xff0c;10kV并联电容装置起着至关重要的作用&#xff0c;比如提高功率因数、改善电压质量等。然而&#xff0c;其暂态过程却较为复杂&#xff0c;需要深入研究。ATP&#xff08;Alternative Transients Program&#xff09;…...