Java设计模式_概述(设计模式类型和基本原则)

一、设计模式

设计模式(Design pattern)代表了最佳的实践,是软件开发人员在软件开发过程中面临一般问题的解决方案,是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。是优秀程序猿的经验结晶。
但不推荐刚入门的开发者学习,哪怕把代码搞的一塌糊涂,也要先将功能完成,初学者,迈过坑是必然的,只有对自己编写的代码不满意,你才会体会到设计模式的重要性,也才能更加理解。

二、四大类型

设计模式可以分为四大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)、J2EE 设计模式
1、 创建型模式;
特点:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。
好处:这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活
包括:
(1)、 工厂模式(FactoryPattern);
(2)、 抽象工厂模式(AbstractFactoryPattern);
(3)、 单例模式(SingletonPattern);
(4)、 建造者模式(BuilderPattern;
(5)、 原型模式(PrototypePattern);
2、 结构型模式;
特点:这些设计模式主要处理类或对象的组合,通过继承或组合的方式获得更灵活的结构,以适应需求变化对对象结构带来的影响。
好处:简化系统的设计和实现,使其具有更好的可扩展性和可维护性。
包括
(1)、 适配器模式(AdapterPattern);
(2)、 桥接模式(BridgePattern);
(3)、 过滤器模式(Filter、CriteriaPattern);
(4)、 组合模式(CompositePattern);
(5)、 装饰器模式(DecoratorPattern);
(6)、 外观模式(FacadePattern);
(7)、 享元模式(FlyweightPattern);
(8)、 代理模式(ProxyPattern);
3、 行为型模式;
特点:这些设计模式专注于对象之间的通信和职责分配。它们通过类继承或对象组合来划分职责,以应对需求变化对多个交互对象的影响。
好处:有助于系统的行为管理,使得系统更加灵活和易于维护。
包括
(1)、 责任链模式(ChainofResponsibilityPattern);
(2)、 命令模式(CommandPattern);
(3)、 解释器模式(InterpreterPattern);
(4)、 迭代器模式(IteratorPattern);
(5)、 中介者模式(MediatorPattern);
(6)、 备忘录模式(MementoPattern);
(7)、 观察者模式(ObserverPattern);
(8)、 状态模式(StatePattern);
(9)、 空对象模式(NullObjectPattern);
(10)、 策略模式(StrategyPattern);
(11)、 模板模式(TemplatePattern);
(12)、 访问者模式(VisitorPattern);
4、 J2EE模式;
主要用于解决在企业级应用开发中的特定问题。
包括:
(1)、 MVC模式(MVCPattern);
(2)、 业务代表模式(BusinessDelegatePattern);
(3)、 组合实体模式(CompositeEntityPattern);
(4)、 数据访问对象模式(DataAccessObjectPattern);
(5)、 前端控制器模式(FrontControllerPattern);
(6)、 拦截过滤器模式(InterceptingFilterPattern);
(7)、 服务定位器模式(ServiceLocatorPattern);
(8)、 传输对象模式(TransferObjectPattern);

三、设计原则

SOLID原则:(5条最核心原则):
1、单一职责原则 (Single Responsibility Principle, SRP)
一个类应该只有一个引起变化的原因。
理解:这意味着一个类应该只有一个职责,当职责变化时,只需修改这个类。这有助于保持类的内聚性,减少类之间的耦合。
2、开放封闭原则 (Open-Closed Principle, OCP)
软件实体(类、模块、函数等)应该是可扩展的,但是不可修改的。
理解:这意味着当需求变化时,我们应该通过添加新的代码来满足这些变化,而不是修改现有的代码。这有助于保持系统的稳定性和可维护性。
3、里氏替换原则 (Liskov Substitution Principle, LSP)
子类型必须能够替换它们的基类型。
理解:这意味着派生类(子类)必须能够无差别地替换其基类(父类),并且程序的行为不会发生变化。这有助于确保代码的正确性和可维护性。
4、接口隔离原则 (Interface Segregation Principle, ISP)
客户端不应该被强制依赖于它们不使用的接口。
理解:这意味着一个类对另一个类的依赖应该是最小的,即一个接口应该小而完备,只包含客户端需要的方法。这有助于减少类之间的耦合,提高系统的可维护性和灵活性。
5、依赖倒置原则 (Dependency Inversion Principle, DIP)
高层模块不应该依赖于低层模块,它们都应该依赖于抽象。
抽象不应该依赖于细节,细节应该依赖于抽象。
理解:这意味着我们应该依赖于抽象(接口或抽象类),而不是具体的实现。这有助于减少类之间的耦合,提高系统的可测试性和可扩展性。

其他5条核心原则:
6、迪米特法则(最少知道原则):一个对象应该对其他对象保持最少的了解。也就是说,一个类应该尽量减少与其他类的耦合度,只与它直接相关的类进行交互。
7、合成复用原则:尽量使用合成/聚合的方式,而不是使用继承来实现代码的复用。继承虽然可以实现代码的复用,但也可能导致类的层次结构过于复杂,破坏封装性。通过合成,可以将已有的类组合成新的类,达到复用的目的,同时保持类的简单和清晰。
8、包内原则:类之间的依赖关系应该尽量减少,尽量限制在包(package)内部。这样可以降低类之间的耦合度,提高系统的可维护性和可扩展性。
9、无环依赖原则:系统中的依赖关系应该形成一个无环的图。也就是说,不应该存在循环依赖的情况,因为循环依赖可能导致代码难以理解和维护。
10、稳定抽象原则:抽象应该比细节具有更强的稳定性。这意味着在设计系统时,应该优先考虑抽象的设计,而不是过早地陷入具体的实现细节中。

学海无涯苦作舟!!!

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

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

相关文章

如何删除.gitignore文件中指定的所有被忽略的文件

要删除.gitignore文件中指定的所有被忽略的文件,你可以使用git rm命令结合-r选项。以下是一些步骤: 查看将要删除的文件:首先,你可以使用git ls-files命令来列出被git忽略的文件,以确保你想要删除的文件列表是正确的。…

LeetCode 热题 100 Day06

矩阵相关题型 Leetcode 48. 旋转图像【中等】 题意理解: 将一个矩阵顺时针旋转90度,返回旋转后的矩阵。 要求: 在原地修改,不借助额外的空间 如果可以使用辅助数组来实现转置,则有 matrix_new[i][j]matrix[j][row-i-1]; 解…

Kubernetes学习-核心概念篇(三) 核心概念和专业术语

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Kubernetes渐进式学习-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 1. 前言 在前面两篇文章我们简单介绍了什么是K8S,以及K8S的…

mysql服务器无法启动问题处理

一台hlr服务器用网管软件登录失败,查找原因,发现网关软件连接服务器的tcp的10002端口失败,超时无应答,导致连接失败。 用户反馈核心网hlr,smc无法登录,putty登录服务器,发现hlr10002端口没有打…

【保姆级讲解下gateway基本配置】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

STM32与OLED显示屏通信(四针脚和七阵脚)

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. 单片机调试 2. OLED简介 3. 接线 4. OLED驱动函数 4.1 四针脚版本 OLED.c OLED.h OLED_Font.h 4.2 七针脚版本 引脚连接 OLED.c OLED.h OLED_Font.h 5. 主函数 工程文件模板 1. 单片机…

Android 当存在双卡时,移动网络默认为SIM卡1

文章目录 一、当Android设备中存在双卡时,移动网络默认为SIM卡1二、下面是完整的代码路径和修改点 一、当Android设备中存在双卡时,移动网络默认为SIM卡1 完成这个需求有以下两个修改点: 下面依旧是Android13 MTK平台,在MtkMulti…

SoC如何开机自动运行脚本程序?

目录 1、通过启动加载程序执行脚本 2、通过Linux init 系统 2.1、/etc/init.d目录中的脚本 2.2、修改/etc/rc.local文件 在Linux SoC开发中,实现SoC启动时执行特定脚本的方法主要取决于你使用的启动加载程序(Bootloader)以及Linux内核的配置。…

unity中压缩文件与解压文件

今天研究了一下在unity中 把文件压缩后转二进制发送到服务器并从服务器下载后解压使用文件,废话不多说直接上代码,zip压缩插件是用的dotnetzip插件,网上可以搜索下载这个dll private static void GetPathMeshData_ZIP(Milling_ProjectData da…

(Snowflake Algorithm)雪花算法Java的简单使用

概述 雪花算法(Snowflake Algorithm)最初是由Twitter开源的,用于生成一个64位的长整型数字作为全局唯一的ID。这个算法是用Scala语言编写的,并且在Twitter内部得到了广泛应用。由于其简单、高效和分布式友好的特性,雪…

Fiddlers使用

下载 FiddlerClassic,是免费的,不过只能在Windows上使用。 使用 如何使用Fiddler进行手机端抓包 手机抓包,如果使用有线WindowsPC共享Wifi热点,子网络ip地址段与PC不一致,再添PC ip地址(8888&#xff09…

JMeter的下载安装与使用(Mac)

1、下载地址​​​​​​https://jmeter.apache.org/download_jmeter.cgi 2、下载Binaries 下的apache-jmeter5.5.tgz 3、解压 4、启动 在bin目录下打开终端,输入sh jmeter 出现jmeter首页界面,即为成功。 5、使用 5.1 语言选择 option选项卡&am…

揭秘!七大副业赚钱秘籍,让你轻松实现财务自由!

以下是七种赚钱的副业推荐: 1,自媒体运营 自媒体运营是当下非常火热的副业之一。通过在微博、微信公众号、抖音、B站等自媒体平台上发布原创内容,吸引粉丝关注,进而实现流量变现。自媒体运营的核心在于内容创作和粉丝互动&#…

java解析PDF、WORD获取其中的表格以及文本内容

近期因工作需要需要解析PDF,需要把PDF中的文本和表格分离,最终要实现的目标是PDF中的文本内容放一块,表格内容放一块,以list的形式存储。解析PDF的技术有很多,经过多次尝试发现使用AdobeAcrobat可以实现表格和文本分离…

06 华三防火墙的如何进入web页面?

1 AI 思路 要进入华三防火墙的Web页面,你需要按照以下步骤操作: 确定防火墙的IP地址:首先,你需要知道你的华三防火墙的IP地址。通常,你可以从网络管理员或者设备本身获取这个信息。 打开浏览器:在你的电脑上打开一个网页浏览器,例如Chrome、Firefox或者Edge等。 输入UR…

系统服务(22年国赛)—— DHCPDHCP Relay(中继)

前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访! 系统服务(22年国赛)—— DHCP&&DHCP Relay(中继)https://myweb.myskillstree.cn/94.html 目录 一、题目 DHCP AppSrv 二…

Linux学习之路 -- 进程篇 -- 自定义shell的编写

前面介绍了进程程序替换的相关知识&#xff0c;接下来&#xff0c;我将介绍如何基于前面的知识&#xff0c;编写一个简单的shell&#xff0c;另外本文的所展示的shell可能仅供参考。 目录 <1>获取用户的输入和打印命令行提示符 <2>切割字符串 <3>执行这个…

第 4 篇 : Netty客户端互发图片和音/视频

说明 因为图片和音/视频不能确定其具体大小, 故引入MinIO。客户端之间只发送消息, 通过上传/下载来获取额外信息 1. MinIO搭建(参考前面文章), 并启动 2. 登录MinIO创建3个Bucket: image、voice、video 3. 客户端改造 3.1 修改 pom.xml <?xml version"1.0" …

苍穹外卖绕过微信支付

经过以下改动可实现&#xff1a; 1、不用微信支付端口 2、弹出支付成功的界面 3、数据库修改支付成功后的数据 #在OrderServiceImpl.java里加入Autowiredprivate OrderService orderService; #在OrderServiceImpl.java里的payment函数做以下改动 #图片里有&#xff0c;红色为原…

2024李卜常识王小晨申论类比刷题课

2024年&#xff0c;李卜常识与王小晨申论类比刷题课成为备考公务员考试的热门选择。李卜老师以其深厚的学识&#xff0c;为学员们剖析常识的精髓&#xff1b;而王小晨老师则通过类比刷题的方式&#xff0c;帮助学员们掌握申论的技巧。这两门课程相互补充&#xff0c;让学员们在…