设计模式-设计模式分类

概述

23 种设计模式,分为创建型模式、结构型模式和行为型模式。另外,近来这一清单又增加了一些类别,例如,并发型模式、线程池模式、Java EE 企业技术的多层应用程序上的模式等。

一、创建型模式

1.工厂方法模式(Factory Method)
定义一个接口用于创建对象,但是让子类决定初始化哪个类。工厂方法把一个类的初始化下放到子类。

2.抽象工厂模式(Abstract Factory)
为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。
3.单例模式(Singleton)
确保一个类只有一个实例,并提供对该实例的全局访问。

4.建造者模式(Builder)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

5.原型模式(Prototype)
用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象此外,扩展的创建型模式还包括如下。

  • 懒惰初始化模式:推迟对象的创建、数据的计算等需要耗费较多资源的操作,只有在第次访问的时候才执行。
  • 对象池模式:通过回收利用对象避免获取和释放资源所需的昂贵成本。

二、结构型模式

1.适配器模式(Adapter)
将某个类的接口转换成客户端期望的另一个接口表示。适配器模式可以消除由于接口不匹配所造成的类兼容性问题。

2.装饰器模式(Decorator)
向某个对象动态地添加更多的功能。装饰器模式是除类继承外另一种扩展功能的方法。

3.代理模式(Proxy)
为其他对象提供一个代理以控制对这个对象的访问。

4.外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这子系统更加容易使用。

5.桥接模式(Bridge)
将一个抽象与实现解耦,以便两者可以独立变化。

6.组合模式(Composite)
把多个对象组成树状结构来表示局部与整体,这样用户可以一样地对待单个对象和对象的组合。

7.享元模式(Flyweight)
通过共享以便有效地支持大量小颗粒对象此外,扩展的结构型模式还包括如下。

  • 单次访问者(Single-serving Visitor):优化被分配的执行访问者,让它只使用一次然后删除。
  • 层次访问者(Hierarchical Visitors):提供一种方法访问每个节点层次的数据结构,如棵树。

三、行为型模式

1.策略模式(Strategy)
定义一个算法的系列,将其各个分装,并且使它们有交互性。策略模式使得算法在用户使用的时候能独立改变。

2.模板方法模式(Template Method)
模板方法模式准备一个抽象类,将部分逻辑以具体方法及具体构造子类的形式实现,然后声明-些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先构建一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。

3.观察者模式(Observer)
在对象间定义一个一对多的联系,当一个对象改变了状态时,所有其他相关的对象会被通知并且白动刷新。

4.迭代子模式(Iterator)
提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示。

5.责任链模式(Chain ofResponsibility)
为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求,需要将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

6.命令模式(Command)
将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可取消的操作。

7.备忘录模式(Memento)
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。

8.状态模式(State)
让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。

9.访问者模式(Visitor)
封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。

10,中介者模式(Mediator)
包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使它们可以松散偶当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用合。可以彼此独立的变化。

11.解释器模式(Interpreter)
给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

四、并发型模式

后来扩展的并发型模式有:

  • 主动对象模式(Active Object)。
  • 阳碍模式(Balking)。
  • 双重检查锁定(Double Checked Locking)。
  • 守卫模式(Guarded)。
  • 领导者/追随者模式(Leaders/Followers)。
  • 监测对象模式(Monitor object)。
  • 读写锁模式(Read write lock)。
  • 调度模式(Scheduler)。

五、线程池模式

后来扩展的线程池模式有:

  • 线程特定存储模式(Thread-Specific Storage)。
  • 反应器(Reactor)。

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

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

相关文章

Tensorflow音频分类

tensorflow https://www.tensorflow.org/lite/examples/audio_classification/overview?hlzh-cn 官方有移动端demo 前端不会 就只能找找有没有java支持 注意版本 注意JDK版本 package com.example.demo17.controller;import org.tensorflow.*; import org.tensorflow.ndarra…

2024年5月文章一览

2024年5月编程人总共更新了7篇文章: 1.2024年4月文章一览 2.《自动机理论、语言和计算导论》阅读笔记:p215-p351 3.《自动机理论、语言和计算导论》阅读笔记:p352-P401 4.《自动机理论、语言和计算导论》阅读笔记:p402-p427 …

05 Linux 内核启动流程

1、阅读 Linux 内核源码 学习 Linux 有两种路线: 1)按照 Linux 启动流程,梳理每个子系统。 2)把 Linux 所有用到的子系统学会,再组合起来。 博主选择第一种方式,可以快速上手,知道自己在学什么东西,在什么阶段起作用。 阅读 Linux 和 Android 源码: https://elix…

2013.8.5-2024.5.10碳排放权交易明细数据

2013.8.5-2024.5.10碳排放权交易明细数据 1、时间:2013.8.5-2024.5.10 2、来源:各碳排放交易所 3、范围:各交易所城市 4、指标:行政区划代码、地区、所属省份、交易日期、交易品种、开盘价_元、最高价_元、最低价_元、成交均价…

列举Spring的IoC和AOP的特点

Spring框架的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)是两个核心特性,它们各自具有显著的特点。 IoC(控制反转)的特点 解耦…

杂项——编码器控制小车走固定距离(stm32)

先算出轮子转一周编码器的数值&#xff08;假设为1000&#xff09;&#xff0c;再算出轮子一周的周长&#xff08;假设为10cm&#xff09;。 那么要前进1米只需要转1米/10cm等于10圈&#xff0c;10圈编码器数值为10000。 我们只需要在代码里面写出编码器数值如果<10000则让…

nltk下载报错

捣鼓voice_clone时报错&#xff1a; 报错信息&#xff1a; mport nltk nltk.download(‘cmudict’)For more information see: https://www.nltk.org/data.htmlAttempted to load tokenizers/punkt/PY3/english.pickleSearched in: - ‘/home/zhangshuai/nltk_data’ - ‘/hom…

【机器学习基础】Python编程08:五个实用练习题的解析与总结

Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面: 简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。 丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些…

在线OJ项目测试(selenium+Junit5)

目录 在线OJ项目测试的思维导图 在线OJ的UI自动化测试 测试一&#xff1a;检查未登录时的页面访问以及一些未登录时的非法操作 测试二&#xff1a;测试注册界面 测试三&#xff1a;测试登录界面 测试四&#xff1a;测试题目列表界面 测试五&#xff1a;测试题目详情界面…

【python】unindent does not match any outer indentation level错误的解决办法

【Python】"unindent does not match any outer indentation level"错误的解决办法 在Python编程中&#xff0c;缩进是定义代码块的关键。与其它编程语言使用花括号或特定关键字不同&#xff0c;Python完全依赖缩进来区分代码结构。如果你在编码时遇到了错误信息unin…

解释Hibernate框架的作用和与JDBC的区别

Hibernate框架的作用以及它与JDBC&#xff08;Java Database Connectivity&#xff09;的区别可以从以下几个方面来解释&#xff1a; Hibernate框架的作用 Hibernate是一个流行的Java持久层框架&#xff0c;它提供了对象关系映射&#xff08;ORM, Object-Relational Mapping&…

【HashMap】保证HashMap线程安全的几种方式

在Java中&#xff0c;HashMap是线程不安全的&#xff0c;这意味着如果多个线程并发地访问和修改同一个HashMap实例&#xff0c;可能会导致数据不一致和其他线程安全问题。为了确保线程安全性&#xff0c;可以考虑以下几种方法&#xff1a; 1. 使用 Collections.synchronizedMa…

【C++进阶】深入STL之list:模拟实现深入理解List与迭代器

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;初步了解 list &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之list &#x1f4d2;1. list…

源码、反码和补码

对于有符号数而言&#xff0c;原码就是一个数的二进制表示。二进制的最高位是符号位&#xff0c;0 表示正数&#xff0c;1 表示负数。 计算机用数的原码进行显示&#xff0c;数的计算和存储是用补码进行的。 正数的原码&#xff0c;反码和补码都一样&#xff0c;即正数三码合…

nomachine使用记录以及录包

录包命令&#xff1a; rosbag record 话题名字&#xff08;可以是原相机话题和执行程序的话题&#xff09;rosbag play 包名&#xff08;可以离线播放包的数据&#xff09; rqt_image_view 话题可视化

FileZilla:不安全的服务器,不支持 FTP over TLS 原因与解决方法

今天在用FileZilla Client连接某个主机的FTP的时候&#xff0c;主机地址、账号、密码、端口确定百分之百正确的情况下&#xff0c;结果报错如下&#xff1a; 状态: 正在解析 x.x.x 的地址 状态: 正在连接 x.x.x.x:21... 状态: 连接建立&#xff0c;等待欢迎消息... 状态: 不安全…

Unreal Engine项目结构与关卡设置详解

引言 Unreal Engine 是一款功能强大的游戏引擎&#xff0c;为开发者提供了丰富的工具来创建和管理游戏项目。本文将详细介绍一个基本的 Unreal Engine 项目结构&#xff0c;并讲解如何在 Unreal 编辑器中进行关卡设置与操作。 Unreal Engine 项目结构 一个基本的 Unreal Eng…

RHEL - 订阅、注册系统和 Yum Repository(新版界面)

《OpenShift / RHEL / DevSecOps 汇总目录》 演示环境说明 本文需要有 redhat.com 账号以及包含 RHEL 的有效订阅。 演示环境使用了通过 minimal 方式安装的 RHEL 7.6 环境&#xff0c;RHEL 可以访问互联网。 红帽网站 access.redhat.com 针对新用户提供了新版界面&#xff0…

建构信任基石:揭秘Web3的去中心化信任体系

在传统的互联网时代&#xff0c;信任往往建立在中心化的机构和第三方平台之上&#xff0c;而这种中心化的信任体系往往面临着数据泄露、信息滥用等问题。然而&#xff0c;随着区块链技术的发展&#xff0c;Web3时代正在向我们展示一种全新的信任体系&#xff0c;即去中心化的信…

mybatis使用笔记

文章目录 打印sql日志mybatis-config.xml方式application.yml里面配置配置类配置方式 其他扫描方式官网文档 mybatis用了那么久&#xff0c;实际一直不明白&#xff0c;做个笔记吧。 打印sql日志 实测&#xff0c;mybatis-config.xml方式好用(记得注掉yml里的相关配置) mybat…