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

news2024/11/17 13:30:59

文章目录

  • 设计模式介绍
  • 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.coloradmin.cn/o/1338799.html

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

相关文章

简单的喷淋实验(2):(1)根据土壤湿度自动控制喷淋开关;(2)根据光照强度控制风扇以及灯的开关---嵌入式实训

目录 简单的喷淋实验(2): (1)根据土壤湿度自动控制喷淋开关; (2)根据光照强度控制风扇以及灯的开关---嵌入式实训 任务2: 具体过程: 所用的头文件: data_global.h …

BDD - Python Behave Retry 机制

BDD - Python Behave Retry 机制 引言Behave RetryBehave Retry 应用feature 文件创建 step 文件Retry运行 Behave 并生成 rerun 文件重新运行失败的场景 引言 在日常运行测试用例,有时因为环境不稳定造成一些测试用例跑失败了,如果能将这些失败的测试用…

少走弯路:单片机使用点阵字体通过像素化的正确获取

要在单片机内自由显示文字,必须准备相应的字库。之前也发文介绍过: 在esp32(esp8266) 提供软字库显示中文的解决方案_esp32中文字库-CSDN博客 包括已经开源的项目: https://github.com/StarCompute/tftziku 这种字体获取思路是&#xff1a…

test mock-01-什么是 mock? Mockito/EasyMock/PowerMock/JMockit/Spock mock 框架对比

拓展阅读 test 之 jmockit-01-overview jmockit-01-test 之 jmockit 入门使用案例 mockito-01-overview mockito 简介及入门使用 PowerMock Mock Server ChaosBlade-01-测试混沌工程平台整体介绍 jvm-sandbox 入门简介 单元测试中的 mock 单元测试是一种验证代码单元&…

echart实现自定义图例文字颜色

1.效果图 2.html <div class"biao" id"biao1"></div> 2.js 关键&#xff1a; color: [#2db7f5, #ff6600, #921AFF, #c32441, #FF00FF, #FF8EFF, #53FF53, #F9F900, #00FFFF],//关键:自定义图例文字颜色在legend中添加data,将数据处理成如下…

git远程操作,推送【push】,拉取【pull】,忽略特殊文件,配置别名,标签管理

文章目录 前言&#xff1a;新建远程仓库克隆推送【push】拉取【pull】 配置git忽略特殊文件给命令配置别名 标签管理理解标签创建标签操作标签 前言&#xff1a; 大家如果没有看过前几章git的基础操作的话&#xff0c;推荐先看一下&#xff0c;看完再来看这个远程操作&#xf…

查看ios app运行日志

摘要 本文介绍了一款名为克魔助手的iOS应用日志查看工具&#xff0c;该工具可以方便地查看iPhone设备上应用和系统运行时的实时日志和奔溃日志。同时还提供了奔溃日志分析查看模块&#xff0c;可以对苹果奔溃日志进行符号化、格式化和分析&#xff0c;极大地简化了开发者的调试…

单集群400TB,OceanBase稳定支撑快手核心业务场景

一款日均超过千万人访问的短视频 App 快手&#xff0c;面对高并发流量如何及时有效地处理用户请求&#xff1f;通过在后端配置多套 MySQL 集群来支撑高流量访问&#xff0c;以解决大数据量存储和性能问题&#xff0c;这种传统的 MySQL 分库分表方案有何问题&#xff1f;快手对分…

个人游戏启动器 | 游戏数据库 playnite 折腾记录

环境&#xff1a;Windows 11 问题&#xff1a;使用平板串联PC游戏后&#xff0c;需要一个本地的PC启动器 解决办法&#xff1a;使用playnite搭配插件 背景&#xff1a;我是个单机游戏爱好者&#xff0c;因为某些原因&#xff0c;需要串流游玩&#xff0c;需要一个方便手柄操作的…

安全运维是做什么的,主要工作内容是什么

安全运维&#xff0c;简称SecOps&#xff0c;是一种集成安全措施和流程到信息技术运维的实践。它的目的是确保在日常运维活动中&#xff0c;如网络管理、系统维护、软件更新等&#xff0c;均考虑并融入安全策略。安全运维的核心是实现安全和运维团队的密切协作&#xff0c;以快…

鸿蒙系列--组件介绍之其他基础组件(上)

上回介绍了基础组件中最常用的组件常用的基础组件&#xff0c;接下来还有其他基础组件 一、Blank 描述&#xff1a;空白填充组件 功能&#xff1a;在容器主轴方向上&#xff0c;具有自动填充容器空余部分的能力。只有当父组件为Row/Column时生效 子组件&#xff1a;无 Blan…

Echarts使用,Echarts图表自适应窗口大小

Echarts官方文档 1.下载Echarts 项目打打开终端直接通过命令 npm install echarts --save 下载完成后在项目package.json查看。 2.使用Echarts 引入方式有两种全局引入和局部引入 全局引入直接在项目main.js引入放到vue原型上。 import * as echarts from echarts Vue.pr…

《Linux C/C++服务器开发实践》:深入探索网络编程的基础知识与实用技术

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 书籍推荐 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. 构建高性能Linux C/C服务器1.1 优化服务器性能1.2 处理并发和并行性1.3 高效管理内存1…

【新资讯】《网络安全事件报告管理办法(征求意见稿)》正在公开征求意见

近年来网络安全事故频发&#xff0c;造成了不少损失和危害。为了减少网络安全事故的发生&#xff0c;规范网络安全事件的报告&#xff0c;国家互联网信息办公室根据《中华人民共和国网络安全法》等法律法规起草了《网络安全事件报告管理办法&#xff08;征求意见稿&#xff09;…

【Linux基础】5. 磁盘管理

文章目录 【 1. 查看磁盘空间 】1.1 df 查看空间利用大小1.2 du 查看目录所占空间大小 【 2. 打包、压缩 】2.1 tar -cvf 打包2.2 gzip 压缩 【 3. 解压缩、解包 】3.1 gunzip 解压缩3.2 tar -xvf 解包 【 1. 查看磁盘空间 】 1.1 df 查看空间利用大小 作用 查看整个文件系统…

keras 人工智能之VGGNet神经网络的图片识别

VGG16结构图 上期文章我们分享了如何使用VGGNet CNN网络结构搭建一个图片识别网络,以及训练了神经网络模型,利用上期训练好的神经模型,可以进行我们的图片识别 图片识别结果 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import …

企业级实战项目:基于 pycaret 自动化预测公司是否破产

本文系数据挖掘实战系列文章&#xff0c;我跟大家分享一个数据挖掘实战&#xff0c;与以往的数据实战不同的是&#xff0c;用自动机器学习方法完成模型构建与调优部分工作&#xff0c;深入理解由此带来的便利与效果。 1. Introduction 本文是一篇数据挖掘实战案例&#xff0c;…

美国某金融公司遭遇网络攻击,130 万民众受影响

The Record 网站披露&#xff0c;美国最大的产权保险公司富达国民金融&#xff08;Fidelity National Financial&#xff08;"FNF"&#xff09;&#xff09;子公司向所在州监管机构报告了一起数据泄露事件&#xff0c;并指出有 1316938 人的数据信息被入侵其母公司的…

普中STM32-PZ6806L开发板(烧录方式)

前言 有两种方式, 串口烧录和STLink方式烧录;串口烧录 步骤 开发板USB转串口CH340驱动板接线到USB连接PC使用自带工具普中自动下载软件.exe烧录程序到开发板 ST Link方式 这种方式需要另外进行供电&#xff0c; 我买的如下&#xff0c;当年用于调试STM8的&#xff0c;也可…

uniapp中两个app互相跳转

例如,appA需要跳转到appB里面 第一步配置,android不用配置的&#xff0c;主要是配置ios的白名单 appB中 appA中 第二步代码 handleJump() {if (plus.runtime.isApplicationExist({pname: com., //安卓包名action: https://a //ios地址})) {if (plus.os.name Android) {pl…