Java学习——设计模式——介绍

文章目录

  • 设计模式介绍
  • UML的类图
    • 表示
    • 类与类之间关系的表示
      • 关联关系
      • 聚合关系
      • 组合关系
      • 依赖关系
      • 继承关系
      • 实现关系

设计模式介绍

设计模式design patterns,指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可用性。

1995年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)、约翰·威利斯迪斯(John Vlissides)等 4 位作者合作出版了《设计模式:可复用面向对象软件的基础》一书,在此书中收录了 23 个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这 4 位作者在软件开发领域里也以他们的“四人组” (Gang of Four,GoF) 著称。

设计模式主要是基于OOP编程提炼的,基于几个原则:

  • 开闭原则。软件应该对扩展开放,而对修改关闭。这里的意思是在增加新功能的时候,能不改代码就尽量不要改,如果只增加代码就完成了新功能,那是最好的。
  • 里氏替换原则。是一种面向对象的设计原则,如果调用一个父类的方法可以成功,那么替换成子类调用也应该完全可以运行。

23个常用模式分类:
1、创建型模型

用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF(四人组)书中提
供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。

2、结构型模型

用于描述如何将类或对象按某种布局组成更大的结构,GoF(四人组)书中提供了代理、适配器、
桥接、装饰、外观、享元、组合
等 7 种结构型模式。

3、行为型模式

用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。
GoF(四人组)书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访
问者、备忘录、解释器
等 11 种行为型模式

UML的类图

类图Class diagram是显示了模型的静态结构,特别是模型中存在的类、类内部结构以及它们与其他类的关系等。

类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化人们对系统的理解;是系统分析和设计阶段的产物,是系统编码和测试的重要模型。

表示

类图使用包含类名、属性field、方法method和带有分割线的矩形来表示。

在这里插入图片描述
属性/方法名称前加的加号、减号表示了这个属性/方法的可见性,UML类图中表示可见性的符号:
1、+:表示public;
2、-:表示private;
3、#:表示protected

属性的完整表示方式是:可见性 名称 : 类型 [ = 缺省值 ]
方法的完整表示方式是:可见性 名称 (参数列表) [ : 返回类型 ]

类与类之间关系的表示

关联关系

关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系。

1、单向关联

带箭头的实线
在这里插入图片描述

2、双向关联

不带箭头的直线
在这里插入图片描述
3、自关联

带箭头且指向自身的线

在这里插入图片描述

聚合关系

聚合关系是强关联关系,是整体和部分之间的关系。
通过成员对象实现,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。

聚合关系用带空心的菱形的实线表示,菱形指向整体

在这里插入图片描述

组合关系

组合表示类之间的整体与部分的关系,它是一种更强烈的聚合关系。
组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。

组合关系用带实心菱形的实线来表示,菱形指向整体

在这里插入图片描述

依赖关系

依赖关系是一种使用关系,是对象之间耦合度最弱的一种关联方式,是临时性的关联。
在代码的某一个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。

依赖关系用带箭头的虚线来表示,箭头从使用类指向被依赖的类

在这里插入图片描述

继承关系

继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系

继承关系用带空心三角箭头的实现来表示,箭头从子类指向父类

在这里插入图片描述

实现关系

实现关系是接口与实现类之间的关系。类实现了接口,类中的操作实现类接口中所声明的所有的抽象操作

实现关系用带空心三角箭头的虚线表示,箭头从实现类指向接口

在这里插入图片描述

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

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

相关文章

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想) 一.安装依赖二、主要代码 预览效果链接: https://github.com/501351981/vue-office 插件文档链接: https://501351981.github.io/vue-office/examples/d…

pth.tar的保存和读取

一、简介 在PyTorch中,.pt、.pth和.pth.tar都是保存训练好的模型的文件格式。主要区别在于: .pt是PyTorch1.6及以上版本中引入的保存格式,可以保存整个模型,包括模型结构、模型参数以及优化器状态等信息,是一个二进制文…

【C++入门到精通】function包装器 | bind() 函数 C++11 [ C++入门 ]

阅读导航 引言一、function包装器1. 概念2. 基本使用3. 逆波兰表达式求值(1)普通写法(2)使用包装器以后的写法 二、bind() 函数温馨提示 引言 很高兴再次与大家分享关于 C11 的一些知识。在上一篇文章中,我们讲解了 c…

【Linux系统编程二十六】:线程控制与线程特性(Linux中线程库/线程创建/线程退出/线程等待)

【Linux系统编程二十六】:线程控制与线程特性 一.Linux线程库pthread1.线程控制块2.线程tid3.线程栈 二.线程控制1.线程创建2.线程退出3.线程等待 三.线程的特性1.独立栈2.局部存储3.线程可分离 一.Linux线程库pthread 在Linux中,是没有明确的线程概念的…

19个地信专业可以投的岗位汇总【GIS求职秘籍】

今天给大家详细科普一下,GIS专业的同学毕业以后还能从事哪些岗位的工作。 (这期不包含学校老师等事业编岗位) 一、GIS数据采集和处理 GIS数据采集和处理在这里分为一个大类,包含前期测绘外业的实地采集,后续的数据加…

石化行业设备管理系统的作用

石化行业是全球经济中不可或缺的重要组成部分,它涵盖了石油、天然气、化工等领域。在这个高风险和高安全要求的行业中,设备的可靠性和安全性至关重要。为了有效管理和维护设备,石化公司越来越多地采用设备管理系统,以提高生产效率…

MongoDB—SQL到MongoDB映射图表

一、术语和概念 下表显示了各种 SQL 术语和概念 以及相应的 MongoDB 术语和概念。 SQL Terms/Concepts MongoDB Terms/Concepts database database table collection row document or BSON document column field index index table joins $lookup, embedded docu…

CSS 伪类函数 :is() 和 :where()

在编写 CSS 时,有时可能会使用很长的选择器列表来定位具有相同样式规则的多个元素。例如,如果您想对标题中的 b 标签进行颜色调整,我们应该都写过这样的代码: h1 > b, h2 > b, h3 > b, h4 > b, h5 > b, h6 > b…

不想root,但想远程控制vivo手机?这个方法不用root也能做到

远程控制vivo手机不用root!今天给大家讲讲免Root情况下,笔记本电脑如何远程控制vivo手机。 在电脑和手机都安装AirDroid,这是免Root的关键。 下载AirDroid个人版 | 远程控制安卓手机软件下载下载AirDroid个人版进行文件传输和管理、远程控制安…

八、HTML 链接

一、HTML 链接 HTML 使用超级链接与网络上的另一个文档相连。 HTML中的链接是一种用于在不同网页之间导航的元素。 链接通常用于将一个网页与另一个网页或资源(如文档、图像、音频文件等)相关联。 链接允许用户在浏览网页时单击文本或图像来跳转到其…

Python进程、线程、协程:多任务并发编程指南

概要 在当今计算机时代,为了提高程序的性能和响应速度,多任务并发编程成为了一种必不可少的技术手段。而Python作为一门高级编程语言,提供了多种多任务并发编程的方式,包括进程、线程和协程。本文将详细介绍这三种方式的使用教程…

Unity 打包AB 场景烘培信息丢失

场景打包成 AB 资源的时候,Unity 不会打包一些自带相关的资源 解决办法:在 Project settings > Graphics下设置(Automatic 修改成 Custom)

基于web的电影院购票系统

**🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅**一 、设计说明 1.1选题动因 …

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~

2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考:警告!!!Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…

振弦采集仪在地基沉降监测中的应用研究

振弦采集仪在地基沉降监测中的应用研究 振弦采集仪是一种专门用于测量地基沉降的仪器,它采用振弦原理来测量地基的沉降情况。振弦采集仪通过在地基上安装一根细长的弹性振弦,并测量振弦的变形来获得地基沉降的数据。在地基沉降监测中,振弦采…

TypeScript Array(数组)

目录 1、数组初始化 2、Array 对象 3、数组迭代 4、数组在函数中的使用 4.1、作为参数传递给函数 4.2、作为函数的返回值 5、数组方法 数组对象是使用单独的变量名来存储一系列的值。数组非常常用。假如你有一组数据(例如:网站名字)…

从“五力”看百亿西凤的必然性

执笔 | 文 清 编辑 | 萧 萧 2023年末,西凤成功突破市场阻碍、跑赢行业周期,正式跻身中国百亿白酒品牌阵容。这是一份全行业及全体西凤人“预期之内”的成绩单。 当下,中国白酒已经进入“存量竞争”时代,马太效应使得强者恒强…

8-链表-旋转链表

这是链表的第8篇算法,力扣链接。 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 1: 输入:head [1,2,3,4,5], k 2 输出:[4,5,1,2,3]示例 2: 输入:h…

[足式机器人]Part2 Dr. CAN学习笔记-Ch01自动控制原理

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Ch01自动控制原理 1. 开环系统与闭环系统Open/Closed Loop System1.1 EG1: 烧水与控温水壶1.2 EG2: 蓄水与最终水位1.3 闭环控制系统 2. 稳定性分析Stability2.1 序言2.2 稳定的分类2.3 稳定的对…

【PTA-C语言】编程练习5 - 函数与指针

如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 编程练习5 - 函数与指针 6-1 求实数和的函数(分数 10)6-2 求解一元二次方程实根的函数(分数 10)6-3 求集合数据的均方差(分数 10)6-4 计…