java设计模式的总结

作用

设计模式是一套被反复使用、经过验证、解决特定问题的最佳实践。它们提供了一种通用的语言,让软件开发者能够更轻松地理解和设计复杂的系统。设计模式有助于提升代码的可读性、可维护性、可扩展性和灵活性。

总结

现知设计模式总共可以分为三种目的型设计模式

  1. 创建型
  2. 结构型
  3. 行为型

而每个类型又有所圈定的范围既作用范围,范围又分为两种

  1. 类    
  2. 对象

解释

创建型设计模式

创建型设计模式是一类处理对象创建的设计模式,通过某种方式控制对象的创建过程,以避免直接使用基本创建方式(如使用new关键字)可能导致的设计问题或增加的设计复杂度。这些设计模式提供了更加灵活和可复用的对象创建方式。

创建型设计模式的主要目的是将系统与它的对象创建、结合、表示的方式分离,增强系统和软件架构的可扩展性和可维护性。这些设计模式在对象创建的类型、主体、方式、时间等方面提高了系统的灵活性

类创建型
  1.  工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类
对象创建型
  1. 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
  2. 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
  3. 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  4. 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

结构型设计模式

主要关注类和对象的组合以及它们之间的关系。这些模式通过描述如何将类和对象组合起来形成更大的结构,以实现新的功能或提高系统的可扩展性和可维护性。

类结构型
  • 适配器模式(Adapter):将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而不能一起工作的类能够一起工作。
  • 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。这有助于降低系统中的耦合度,提高可扩展性。
  • 组合模式(Composite):将对象组合成树形结构以表示“部分整体”的层次结构,使得客户端对单个对象和复合对象的使用具有一致性。
对象结构型
  • 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。
  • 外观模式(Facade):为子系统中的一组接口提供一个一致的界面,使得子系统更加容易使用。
  • 享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。
  • 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。

行为型设计模式

   是一组关注对象间通信和职责分配的设计模式。这些模式描述了在运行时程序中的复杂流程控制,特别是描述多个类或对象之间如何相互协作以完成单个对象无法单独完成的任务。行为型设计模式涉及算法和对象间职责的分配,以提高系统的灵活性和可维护性。

类行为型
  1. 模板方法模式(Template Method Pattern):这种模式定义了一个操作中的算法骨架,将算法的一些步骤延迟到子类中实现。它允许子类在不改变算法结构的情况下重定义算法的某些特定步骤。
  2. 策略模式(Strategy Pattern):策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户端。这使得算法的变化不会影响到使用算法的客户端,也实现了算法与客户端的解耦。
  3. 访问者模式(Visitor Pattern):访问者模式是一种将数据结构与数据操作分离的设计模式。它可以在不修改已有数据结构的情况下增加新的操作。访问者模式适用于数据结构相对稳定,而操作易于变化的场景。
对象行为型
  1. 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,会通知所有观察者对象,使它们能够自动更新。

  2. 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。这允许子类在不改变算法结构的情况下重定义算法的某些特定步骤。

  3. 策略模式(Strategy Pattern):定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式使得算法可以独立于使用它的客户端,从而提高了系统的灵活性和可扩展性。

  4. 职责链模式(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合。这些对象被连成一条链,并沿着这条链传递请求,直到有对象处理它为止。

  5. 状态模式(State Pattern):允许一个对象在其内部状态发生改变时改变其行为。这使得对象看起来好像改变了它的类,从而提高了系统的灵活性和可扩展性。

  6. 访问者模式(Visitor Pattern):在不改变集合元素的前提下,为集合中的每个元素提供多种访问方式。这意味着每个元素可以有多个访问者对象来访问它。

  7. 备忘录模式(Memento Pattern):在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。这允许对象在需要时返回到之前的状态。

  8. 迭代器模式(Iterator Pattern):提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。这使得客户端可以遍历聚合对象而不需要了解其底层结构。

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

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

相关文章

SQL--字符串反转函数 reverse() 简单明了

字符串反转函数:reverse 语法: reverse(string A) 返回值: string 说明:返回字符串A的反转结果 举例: hive> select reverse(abcedfg); gfdecba

Navicat的使用

1. Navicat介绍 Navicat: 是一款流行的数据库管理和开发工具, 它支持多种数据库系统, 如: MySQL, MariaDB, MongoDB, SQL Server, Oracle, PostgreSQL 等. Navicat通过提供直观的图形用户界面(GUI), 使用户能够更轻松地执行各种数据库操作, 而无需记住复杂的SQL命令.以下是Nav…

PyQt5图片浏览器

PyQt5图片浏览器 实现方式功能实现具体代码 界面实现pillow源码修改ImageQt错误主页面布局 项目开源地址 分享一个图片浏览器 实现方式 qt本身有一个QGraphicsView类用来当做视图框架。 具体参考:如何在pyqt中使用 QGraphicsView 实现图片查看器 不过大佬给的例子…

聚集高速托盘类四向穿梭车ASRV|一车跑全仓可获得10000个货位的HEGERLS智能搬运机器人

随着国内外制造业加速转型升级,越来越多的企业需要进行物流智能化升级,但是往往受到仓库面积、高度、形状等现实条件的限制,以及市场不确定性因素的影响。因此,相对于投资传统的自动化立体库,企业更倾向于选择智能化、…

【深度学习数学工具】K-FAC:Kronecker-factored Approximate Curvature

Kronecker-factored Approximate Curvature (K-FAC) 是一种优化深度神经网络的先进方法,特别适用于大规模网络。K-FAC通过近似神经网络的Hessian矩阵的结构,以更有效率和准确性的方式更新网络权重。这种方法基于一个关键的观察:深度网络的Hes…

如何在 HTML 中嵌套、引入其他的 HTML?

在日常开发中,书写的 HTML 页面往往不是独立或互不通用,通常是有些头部、尾部或者其他部分是公用的,但是 HTML 有不同 JSP 页面可以使用类似 include 这样的动作标记,所以接下来介绍二种 HTML 页面引入其他 HTML 页面的方法。 1.…

机器学习-01-课程目标与职位分析

总结 本系列是机器学习课程的第01篇,主要介绍本门课程的课程目标与职位分析 教材 数据挖掘与机器学习 课程教学方法 布鲁姆教学法 认知领域(cognitive domain) 1.知道(知识)(knowledge) 是指…

kylin v10 升级 openssl、openssh

升级 openssl 一、查看当前安装的版本 # openssl version OpenSSL 1.0.2g 1 Mar 2016注意:不要卸载旧版本,会出依赖方面的问题! 二、下载 wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz三、编译 tar zxvf openssl-1.1.1g…

细嗦MySQL三大日志

文章目录 三大日志:binlog(归档日志)、redo log(重做日志)、undo log(回滚日志)redo log刷盘机制日志文件组 binlog记录格式写入机制 两阶段提交undo log提供回滚操作提供MVCC(多版本…

CSS常见的选择器介绍

CSS&#xff08;层叠样式表&#xff09;选择器是一种模式&#xff0c;用于选择要应用样式的HTML元素。以下是一些常见的CSS选择器类型和实际应用样例供参考&#xff1a; 1、元素选择器&#xff1a; 直接通过HTML元素名称选择元素。例如&#xff0c;p选择所有<p>元素。 …

MySQL基本知识

目录 一&#xff0c;MySQL的元数据库 1.1.什么是元数据库 1.2.有哪些元数据库 1.3.切换数据库 二&#xff0c;账户管理 2.1.设置权限 2.2.授权用户 2.3.查看权限 2.4.撤销权限 三&#xff0c;MySQL引擎 3.1什么是数据库引擎 3.2.查看数据引擎 3.3.MyISAM引擎 3.4…

科技云报道:黑马Groq单挑英伟达,AI芯片要变天?

科技云报道原创。 近一周来&#xff0c;大模型领域重磅产品接连推出&#xff1a;OpenAI发布“文字生视频”大模型Sora&#xff1b;Meta发布视频预测大模型 V-JEPA&#xff1b;谷歌发布大模型 Gemini 1.5 Pro&#xff0c;更毫无预兆地发布了开源模型Gemma… 难怪网友们感叹&am…

【Excel PDF 系列】POI + iText 库实现 Excel 转换 PDF

你知道的越多&#xff0c;你不知道的越多 点赞再看&#xff0c;养成习惯 如果您有疑问或者见解&#xff0c;欢迎指教&#xff1a; 企鹅&#xff1a;869192208 文章目录 前言转换前后效果引入 pom 配置代码实现 前言 最近遇到生成 Excel 并转 pdf 的需求&#xff0c;磕磕碰碰总…

stm32——hal库学习笔记(DMA实验)

一、DMA介绍&#xff08;了解&#xff09; 二、DMA结构框图介绍&#xff08;熟悉&#xff09; 三、DMA相关寄存器介绍&#xff08;熟悉&#xff09; 四、DMA相关HAL库驱动介绍&#xff08;掌握&#xff09; 五、DMA配置步骤&#xff08;掌握&#xff09; 六、编程实战&#xff…

Anaconda和TensorFlow环境搭建!!

Anaconda下载 进入官网下载 https://www.anaconda.com/download 也可以通过清华的映像站下载&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 我这里下载的是3.4.20版本。下载好就可以安装默认安装就行。 打开Anaconda Prompt修改成国内镜像 conda c…

大概了解一下G1收集器

在上一篇文章中&#xff08;链接&#xff1a;大概了解一下CMS收集器&#xff09;我们提到&#xff0c;CMS是一种主要针对旧生代对象进行回收的收集器。与CMS不同&#xff0c;G1号称“全功能的垃圾收集器”&#xff0c;对初生代内存和旧生代内存均进行管理。鉴于此&#xff0c;这…

ubuntu虚拟机与windows之间实现复制粘贴功能

1.首先卸载ubuntu中已有的vm-tools工具 sudo apt-get autoremove open-vm-tools 2.安装open-vm-tools sudo apt-get install open-vm-tools #安装open-vm-tools sudo apt-get install open-vm-tools-desktop 3.重启ubuntu虚拟机

pyspark分布式部署随机森林算法

前言 分布式算法的文章我早就想写了&#xff0c;但是一直比较忙&#xff0c;没有写&#xff0c;最近一个项目又用到了&#xff0c;就记录一下运用Spark部署机器学习分类算法-随机森林的记录过程&#xff0c;写了一个demo。 基于pyspark的随机森林算法预测客户 本次实验采用的…

成功解决ModuleNotFoundError: No module named ‘cv2’

&#x1f525; 成功解决ModuleNotFoundError: No module named ‘cv2’ &#x1f525; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 …

中间件-Nginx漏洞整改(限制IP访问隐藏nginx版本信息)

中间件-Nginx漏洞整改&#xff08;限制IP访问&隐藏nginx版本信息&#xff09; 一、限制IP访问1.1 配置Nginx的ACL1.2 重载Nginx配置1.3 验证结果 二、隐藏nginx版本信息2.1 打开Nginx配置文件2.2 隐藏Nginx版本信息2.3 保存并重新加载Nginx配置2.4 验证结果2.5 验证隐藏版本…