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、自关联

带箭头且指向自身的线

在这里插入图片描述

聚合关系

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

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

在这里插入图片描述

组合关系

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

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

在这里插入图片描述

依赖关系

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

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

在这里插入图片描述

继承关系

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

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

在这里插入图片描述

实现关系

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python序列之集合

系列文章目录 Python序列之列表Python序列之元组Python序列之字典Python序列之集合(本篇文章) Python序列之集合 系列文章目录前言一、集合是什么?二、集合的操作1.集合的创建(1)使用{}创建(2)…

电商大数据商品采集:阿里巴巴1688电商网站货源产品信息采集

商品详情大数据采集:阿里巴巴1688电商网站货源产品信息采集 ------------- 数据采集满足多种业务场景:适合产品、运营、销售、数据分析、政府机关、电商从业者、学术研究等多种身份 职业。 舆情监控:全方位监测公开信息,抢先获取舆论趋势。 市…

计算机组成原理复习4

习题 练习题 下列不属于系统总线的为() a.数据总线 b.地址总线 c.控制总线 d.片内总线 D 系统总线中地址总线的功能是() a.选择主存单元地址 b.选择进行信息传输的设备 c.选择外存地址 d.指定主存和I/O设备接口电路的地址 D 解…

【操作系统xv6】学习记录1

前置说明: git-v9版本:git clone https://github.com/mit-pdos/xv6-public/tree/xv6-rev9 bili:https://www.bilibili.com/video/BV15r4y1z75F 深圳大学罗秋明老师的课程 我自己用的wsl2的ubuntu18 无桌面版本 make qemu-nox bug 起初在双系统的ubuntu…

数据模型设计

数据模型设计,可以理解为数据库中的表结构设计。 我们在设计器中创建的数据模型,也称为实体。我们将前端页面中传过来的数据保存到对应的实体中,即为将前端数据保存到了数据库中。 1 、实体与枚举的创建 1 .1 创建供应商 supplier实体 在左…

旁挂二层隧道转发小实验

WLAN配置 旁挂二层隧道转发 1.基础配置: SW1: system-view vlan batch 100 to 101interface GigabitEthernet 0/0/1 port link-type trunk port trunk pvid vlan 100 //打上管理VLAN的100标签 port trunk allow-pass vlan 100 101interface GigabitEthernet 0/…

蓝桥杯C/C++程序设计——单词分析

题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出…

mount -a 出错任然重启问题

问题来源 在磁盘分区挂载过后,为了创建的新分区的能够永久挂载,我们常常会在/etc/fstab下写下配置文件,使其永久挂载。但是该配置一旦写错,就面临这死机问题,为此,以下操作针对该问题进行 解决方案&#x…

WSL使用VsCode运行cpp文件

文章目录 缘起主要步骤参考 缘起 今天在阅读《C20设计模式-可复用的面向对象设计方法(原书第2版)》的时候,遇到代码想要运行一下,于是决定使用wsl下的vscode配置cpp的环境。 主要步骤 1.安装gcc和g编译器 打开命令行输入wsl&am…

linux驱动(一):led

本文主要探讨210的led驱动相关知识。 驱动 操作系统驱动硬件的代码,驱动上层是系统调用API,下层是硬件 宏内核:内核整体上为一个过程实现,运行在同一地址空间,相互调用简单高效 微内核:功能为独立过程,过程间通过IPC通信 …

从实际工作情况,介绍嵌入式(MCU)软件开发常用(通用)工具

目录 前言 1、代码阅读及编辑工具(VSCode、Understand) 2、代码对比工具(Beyond Compare) 3、代码仓库相关工具(Git、SVN、Tortoise) 4、文本编辑器(Notepad) 5、电脑文件搜索工…

使用递归实现深拷贝

文章目录 为什么要使用递归什么深拷贝具体实现基础实现处理 函数处理 Symbol处理 Set处理 Map处理 循环引用 结语-源码 为什么要使用递归什么深拷贝 我们知道在 JavaScript 中可以通过使用JSON序列化来完成深拷贝,但是这种方法存在一些缺陷,比如对于函数…

「Kafka」生产者篇

「Kafka」生产者篇 生产者发送消息流程 在消息发送的过程中,涉及到了 两个线程 ——main 线程和Sender 线程。 在 main 线程中创建了 一个 双端队列 RecordAccumulator。 main线程将消息发送给RecordAccumulator,Sender线程不断从 RecordAccumulator…

<软考高项备考>《论文专题 - 37 采购管理(2) 》

2 过程1-规划采购管理 2.1 问题 4W1H过程做什么记录项目采购决策、明确采购方法,及识别潜在卖方的过程作用:确定是否从项目外部获取货物和服务,如果是,则还要确定将在什么时间、以什么方式获取什么货物和服务为什么做为如何采购…

移动端开发框架mui代码在安卓模拟器上运行(HbuilderX连接到模拟器)

开发工具 HBuilder X 3.8.12.20230817 注意:开发工具尽量用最新的或较新的。太旧的版本在开发调试过程中可能会出现莫名其妙的问题。 1、电脑下载安装安卓模拟器 我这里使用的是 夜神模拟器 ,也可以选择其他安卓模拟器 夜神模拟器官网:夜神安…

idea实现Java连接MySQL数据库

1.下载MySQL并安装 首先如果没有mysql的需要先下载MySQL,可以看这个教程: Mysql超详细安装配置教程(保姆级)_mysql安装及配置超详细教程-CSDN博客 2.下载mysql 的jdbc驱动 官网:MySQL :: Download Connector/J 解压并将驱动jar包导入id…

ThinkPad T14s Gen3,ThinkPad X13 Gen3(21BS,21BQ,21BR,21BN)原装出厂Win11系统

lenovo联想ThinkPad系列T14s/X13 Gen3笔记本电脑原装Windows11预装OEM系统镜像 链接:https://pan.baidu.com/s/1yhRMIjlkFvt86aLioOoNOA?pwdfrsp 提取码:frsp 原厂系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、联想…

内网常规攻击路径

点击星标,即时接收最新推文 随着网络技术的发展,企业内部网络架构的变化,网络设备多样性的增加,面对内网攻击,防御体系逐渐阶梯化,通过不同维度的防御联动,将攻击拒之门外。对于突破网络边界后进…

Rust学习笔记000 安装

安装命令 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh info: downloading installerWelcome to Rust!This will download and install the official compiler for the Rust programming la…

Goodbye2023, Hello 2024!

2023的所有比赛结束了,以后 xcpc 相关的比赛应该都和我没啥关系了,可能只打打蓝桥天梯了,等到明年的时候估计很多算法的东西也都忘记了吧,彻底退休了。打铁人不配叫退役,也不敢公开这篇文章,只敢在没人看的…