请问Java8进阶水平中,常用的设计模式有哪些?

设计模式通常被分为三大类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。以下是这20个设计模式的分类:

创建型(Creational)设计模式:

  1. 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。
  2. 工厂方法模式(Factory Method):定义一个创建对象的接口,让子类决定要实例化的类是哪一个。
  3. 抽象工厂模式(Abstract Factory):提供一个接口,用于创建一系列相关或依赖对象,而不需要指定它们的具体类。
  4. 建造者模式(Builder):将一个复杂对象的构建与其表示分离,允许通过指定复杂对象的不同部分逐步构造一个复杂对象。
  5. 原型模式(Prototype):通过复制现有的实例来创建新的实例。

结构型(Structural)设计模式:

  1. 适配器模式(Adapter):允许将不兼容的接口转换为一个可以使用的兼容接口。
  2. 桥接模式(Bridge):将抽象部分与其实现部分分离,使它们可以独立地变化。
  3. 组合模式(Composite):允许将对象组合成树形结构以表示“部分-整体”的层次结构。
  4. 装饰器模式(Decorator):动态地添加额外的功能到一个对象上,同时不改变其类结构。
  5. 外观模式(Facade):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口。
  6. 享元模式(Flyweight):以共享的方式高效地支持大量细粒度的对象。
  7. 代理模式(Proxy):为其他对象提供一个代理或占位符,以控制对这个对象的访问。

行为型(Behavioral)设计模式:

  1. 观察者模式(Observer):当对象间存在一对多关系时,则使用观察者模式。一个被观察的对象变化时,所有依赖它的对象都会得到通知并自动更新。
  2. 策略模式(Strategy):定义一系列算法,把它们一个个封装起来,并使它们可以互换。
  3. 命令模式(Command):将一个请求封装为一个对象,从而允许用户使用不同的请求、队列或日志请求来参数化其他对象。
  4. 模板方法模式(Template Method):定义一个算法的骨架,将一些步骤延迟到子类中实现。
  5. 迭代器模式(Iterator):提供一种方法来顺序访问一个聚合对象的元素,而不暴露其内部表示。
  6. 责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。
  7. 中介者模式(Mediator):定义一个中介对象来简化其他对象之间的交互。
  8. 状态模式(State):允许对象在其内部状态改变时改变它的行为。

每个设计模式都提供了解决特定问题的方法,理解它们有助于开发者在面对类似问题时能够快速找到解决方案。

我选择工厂模式单例模式桥接模式装饰器模式命令模式
使用场景:

  • 工厂模式:PDF功能模块
  • 单例模式:系统配置对象
  • 桥接模式:PDF功能模块
  • 装饰器模式:PDF功能模块
  • 命令模式:流程模块?

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

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

相关文章

Linux Centos内网环境中安装mysql5.7详细安装过程

一、下载安装包 下载地址(可下载历史版本): https://downloads.mysql.com/archives/community 二、解压到安装路径 tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz三、重命名 mv /usr/local/mysql-5.7.20-linux-glibc2.12-x86_64 …

(已解决)jspdf + html2canvas实现导出html为PDF文件(高清、分页)解决图片和表格被分割截断以及滚动条的问题。(含源码及详细解释)

目录 一、项目背景 二、实现过程 三、解决图片和表格分割截断以及滚动条的问题 一、项目背景 最近项目中需要实现将html页面的数据导出到pdf文件,并提供给客户端下载。在查找了一些资料之

Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明

Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明 目录 Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明 一、简单介…

留言板——增添功能(持久化存储数据,使用MyBatis)

目录 一、数据准备 二、引入MyBatis 和 MySQL驱动依赖 三、配置MySQL账号密码 四、编写后端代码 五、调整前端代码 六、测试 之前的代码:综合性练习(后端代码练习3)——留言板_在线留言板前后端交互-CSDN博客 一、数据准备 创建数据库…

公司生产环境AWX配置的操作与部署说明

一、模板 模板名称,见名知义项目:ansible脚本所在的位置,可以是本地,也可以是远程分布式配置,比如gitlab。(详见下文)PLAYBOOK:ansible运行的入口凭证作业标签:任务的细分…

2024 RCTF WebMisc部分 WP

Misc gogogo 考点:内存取证 得到 gogogo.raw 内存取证的题用volatility和AXIOM结合分析 AXIOM 分析存在云服务 但是百度网盘要密码 https://pan.baidu.com/share/init?surlZllFd8IK-oHvTCYl61_7Kw 发现访问过sqlite数据库 可以尝试提取数据库文件出来 结合 volatility 第…

全面详解Java并发编程:从基础到高级应用

全面详解Java并发编程:从基础到高级应用 Java并发编程是Java开发中一个非常重要的领域,涉及多线程编程技术,用于提高程序的性能和响应能力。并发编程在多核处理器上特别有用,因为它可以同时执行多个任务,从而提高应用…

知识库管理系统:是什么、作用、如何搭建

你有没有遇到过这种情况:在工作中想要查找某个信息,查找了很多个文档还是没找到准确的信息;或者在团队中,总是在重复做着相同的资料搜集工作,浪费了大量时间和精力?如果你在烦恼这个问题,那么跟…

替换字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 sub()方法用于实现字符串替换,语法格式如下: re.sub(pattern, repl, string, count, flags) 参数说明: l pat…

MyEclipse使用教程

MyEclipse使用教程如下,按照以下步骤,您可以逐步熟悉并掌握MyEclipse的基本使用: 一、MyEclipse安装与准备 软件准备: 在使用MyEclipse之前,您需要确保已经安装了JDK(Java Development Kit)。J…

软件测试可发现所有bug吗?有什么样的原则和目的?

在今天的高度数字化时代,软件测试的重要性不可忽视。这是一种系统性的过程,通过对软件系统进行评估和验证,以确定其是否满足预期要求。在软件开发的各个阶段,软件测试都扮演着至关重要的角色。它涉及到软件功能、性能、安全性等多…

在CentOS系统上安装Oracle JDK(华为镜像)

在CentOS系统上安装Oracle JDK(华为镜像) 先爱上自己,再遇见爱情,不庸人自扰,不沉溺过去,不为自己的敏感而患得患失,不为别人的过失而任性,这才是终身浪漫的开始。 https://repo.huaweicloud.com/java/jdk …

C++学习第十一天——vector的模拟实现

✨ 生于火焰,落俗不可避免,但浪漫至死不渝 🌏 📃个人主页:island1314 🔥个人专栏:C学习 🚀 欢迎关注:👍点赞 &…

DevExpress开发WPF应用实现对话框总结

说明: 完整代码Github​(https://github.com/VinciYan/DXMessageBoxDemos.git)DevExpree v23.2.4(链接:https://pan.baidu.com/s/1eGWwCKAr8lJ_PBWZ_R6SkQ?pwd9jwc 提取码:9jwc)使用Visual St…

基于Spring前后端分离版本的论坛系统-自动化测试

目录 前言 一、测试环境 二、环境部署 三、测试用例 四、执行测试 4.1、公共类设计 创建浏览器驱动对象 测试套件 释放驱动类 4.2、功能测试 注册页面 登录页面 版块 帖子 用户个人中心页 站内信 4.3、界面测试 注册页面 登录页面 版块 帖子 用户个人中心页…

Redis实战篇3:优惠券秒杀

说明 该实战篇基于某马的Redis课程中的《某马点评项目》。非常适合有相关经验、缺少企业级解决方案,或者想要复习的人观看,全篇都会一步一步的推导其为什么要这么做,分析其优缺点,达到能够应用的地步。 本实战篇中心思想就是把项目…

Spring——定制 Bean 的性质

文章目录 生命周期回调初始化回调销毁回调默认初始化和销毁​​方法结合生命周期机制启动和关闭回调 ApplicationContextAware 和 BeanNameAware其他Aware接口 生命周期回调 要与容器对 bean 生命周期的管理进行交互,您可以实现 Spring InitializingBean和Disposab…

Mariadb操作命令指南

MariaDB简介 ​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关! 数据库应用程序与主应用程序分开存在,并存储数据集合。 每个数据库都使用一个或多个API来创建,访问&#xf…

分立元件实现稳压

电路原理图 优点:电压精度高,可以调整输出电压 缺点:压差大时效率较低,发热严重。 参考连接 TL431-高效5V精密稳压器-电路知识干货 (qq.com)https://mp.weixin.qq.com/s?__bizMzkxNzIxNTc5OQ&mid2247484878&idx1&…

操作系统教材第6版——个人笔记1

第一章 计算机操作系统概述 操作系统是计算机系统中最重要的系统软件,它统一管理计算机系统的硬件资源与信息资源,控制与调度上层软件的执行并为其提供易于使用的接口。从资源管理、程序控制、操作控制、人机交互、程序接口、系统结构6个角度深入观察操…