设计模式、系统设计 record part02

news2024/12/25 1:01:58

软件设计模式

这里是引用
1.应对重复发生的问题
2.解决方案
3.可以反复使用


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.本质面向对象
2.优点很多


在这里插入图片描述
1.创建型-创建和使用分离
2.结构型-组合
3.行为型-协作
5+7+11=23种模式


UML-统一建模语言-Unified Modeling Language

在这里插入图片描述
1.可视化图形化
2.各种图(9种图)
3.可以同时表示静态信息、动态信息


类图-class diagram

这里是引用
就是图形化显式
在这里插入图片描述
className,field,method
+public,-private,#protected
在这里插入图片描述

关联关系

单向关联:
在这里插入图片描述
field:type 成员变量:address 其属性 :Address (Address 是一个类) 关联关系 is
最常用的,类与类之间的关系
注意,单项关联有一个箭头
双向关联:
在这里插入图片描述
各自持有,对方的类,来当作自己的成员变量,
注意,双向关联没有箭头
关联:
在这里插入图片描述


聚合关系

这里是引用
1.整体、成员(也叫部分)
2.成员(部分)独立存在
注意,聚合关系用菱形表示,不是箭头,而且是空心菱


组合关系

这里是引用
1.整体、成员(也叫部分)
2.成员(部分)能独立存在
注意,组合关系用菱形表示,不是箭头,是实心菱


依赖关系

在这里插入图片描述
1.耦合度最弱,
2.临时性的关系(不是整体和部分它们之间那样的关系)
3.虚线+箭头指向,被使用的类


继承关系

在这里插入图片描述
1.耦合度最强,
2.父子关系
3.实线空心三角形
4.指向父类
注意,继承关系使用实线+空心三角


实现关系

这里是引用
1.接口、实现类
2.实现关系使用虚线空心三角形
3.指向接口
注意,实现关系使用虚线+空心三角


单例模式

这里是引用
在这里插入图片描述
单例,使用一个内存空间,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
private static LazySingleton instance;
LazySingleton 是类型,
instance 是成员变量,
相当于,private static string color;
成员变量的类型写在成员变量前面并用空格连接它们,
注意,懒汉式单例模式,在加载类的时候,并没有单例生成,
只有在第一次调用getInstance()方法的时候,才会创建单例对象,
单例对象代码,如下:
在这里插入图片描述
使用测试类Test1验证在多次调用后,产生的是否为单例对象(即是否是同一个对象),代码如下:
在这里插入图片描述
测试结果,如下:
在这里插入图片描述
内存地址相同,都是4554617c,说明这4个实例就是同一个实例,即单例实例
在这里插入图片描述
注意,饿汉单例模式,在类创建的同时,就会同步建立一个静态的单例对象,之后也不会再作改变。
饿汉式代码,如下:
在这里插入图片描述
注意,使用final修饰的变量 ,表示其内存地址就已经固定了,不会再发生改变
测试在多次调用后,产生的实例是否是同一个实例,测试代码如下:
在这里插入图片描述
测试结果如下:
在这里插入图片描述
显然是同一个内存地址,说明再经过了3次调用,每次都得到同一个实例,即同一个单例

枚举类型,创建单例代码,如下:
在这里插入图片描述
注意,这里创建SingletonEnum类之前要手工选择Java中的enum代码,如下:
在这里插入图片描述
测试类代码如下:
在这里插入图片描述
测试结果,如下:
在这里插入图片描述
说明是同一个单例,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用Runtime的单例对象获取Java虚拟机的内存总量、最大内存,代码如下:
在这里插入图片描述
用Runtime的单例对象执行Windows命令的代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
实现上述两个功能,完整代码,如下:
在这里插入图片描述
注意,主方法上有一个抛出异常的代码,
在这里插入图片描述
把执行ipconfig的结果存放到process变量里,
在这里插入图片描述
用getInputStream方法将变量process中的数据转成流数据放到变量inputStream中,
在这里插入图片描述
准备一个100兆空间大小的字节类型的变量arr,
在这里插入图片描述
把变量inputStream中的流数据通过read方法存放到字节变量 arr中,
在这里插入图片描述
把b个字节数据转成gbk码的字符串,


当通过Runtime执行像ipconfig这样的命令时,
命令的输出会被重定向到操作系统的一个进程间通信(IPC)通道,
这个通道我们不能直接以文本形式访问。
为了能够读取和处理这些输出,我们需要通过特定的流接口来访问这些数据。

Process类的getInputStream()方法就是用来获取这样一个InputStream对象的。

这个InputStream代表了子进程的标准输出流。

简单来说,命令的输出在操作系统层面是以字节流的形式存在的,
而InputStream正是Java中处理字节流的标准方式。

通过将进程的输出流转换为InputStream,
我们可以利用Java的I/O流库来读取、解析这些原始的字节数据,进而转换成我们能够理解和处理的格式,比如字符串。

September2024the27thFriday

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

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

相关文章

Python编程:08- pycharm使用技巧

新建文件时,自动填充代码 设置方法: settings→editor→file and code templates,选择python script #${NAME} 文件名 #${DATE} 日期自动补齐 if name ‘main’: # 先输入main,然后按tab键自动补齐自定义的段落 settings→editor→live templates,在右侧点击号…

C语言进阶版第12课—字符函数和字符串函数1

文章目录 1. 字符分类函数1.1 库函数iscntrl1.2 库函数isspace1.3 库函数islower和isupper 2. 字符转换函数3. strlen函数的使用和模拟实现3.1 strlen函数的使用3.2 strlen函数的模拟实现 4. strcpy函数的使用和模拟实现4.1 strcpy函数的使用4.2 strcpy函数的模拟实现 5. strca…

manim页面中不规则分割整个人页面。

界面中的分割方式 在信息设计中,我们常常需要通过分割设计的方式来对信息进行分组,界面中的分割方式大致分为三种:卡片、线条、留白。 界面中的分割方式主要可以分为以下几种: 一、根据规则进行分割: 规则网格分割&…

Starrocks with 嵌套

在某些场景下需要进行 with 嵌套 需要以下进行处理,报如图错误 with abc as (select * from .. ) insert into xxx select * from abc尝试创建物化视图 CREATE MATERIALIZED VIEW IF NOT EXISTS ads_test.xxx_mv REFRESH DEFERRED MANUAL AS with abc as (select…

C#基于SkiaSharp实现印章管理(9)

将印章设计模块设计的印章保存为图片并集中存放在指定文件夹内。新建印章应用项目,主要实现对图片及PDF文件加盖印章功能。本文实现给图片加盖印章功能。   给图片加盖印章的逻辑比较简单,就是将印章图片绘制到图片指定位置,使用SKControl控…

如何选择数据库架构

选择合适的数据库架构是一个复杂的过程,它取决于多种因素,包括应用程序的需求、数据量的大小、并发访问量、数据一致性要求、预算以及技术团队的熟悉程度等。以下是一些关键的步骤和考虑因素,帮助你选择合适的数据库架构: 1. 分析…

JITWatch安装使用方法

JITWatch 版本1.4.2 JDK 版本 11以上 1.下载JITWatch: https://github.com/AdoptOpenJDK/jitwatch/releases/download/1.4.2/jitwatch-ui-1.4.2-shaded-win.jar 2.启动 bat脚本执行:通过启动jar包方式启动JITWatch echo off start cmd /c "ti…

人工智能 实验1 Python语法

我发现了有些人喜欢静静看博客不聊天呐, 但是ta会点赞。 这样的人呢帅气低调有内涵, 美丽大方很优雅。 说的就是你, 不用再怀疑哦 实验1 Python语言基础一 【实验目的】掌握Python及其集成开发环境的下载安装及其简单应用 【实验内容…

结合了LLM(大语言模型)的编辑器,不仅能理解人类语言,还能与用户互动,仿佛有了自己的思想。...

从前有一个神奇的编辑器王国,那里住着各种编辑器:开源的、AI代码编辑器、视频编辑器,还有专门处理邮件和音频的编辑器。一天,国王Markdown决定举办一场盛会,邀请所有编辑器展示各自的才华。 开源编辑器们自豪地展示了他…

解决hbase和hadoop的log4j依赖冲突的警告

一、运行hbase的发现依赖冲突的警告 这警告不影响使用 二、重命名log4j文件 进入HBase的lib包下,将HBase的log4j文件重命名,改成备份,这样再次运行hbase的时候,就没有依赖冲突了。 三、冲突成功解决

数据分析工具julius ai如何使用

什么是julius ai Julius AI 是一款强大的ai数据分析工具。用户可以使用excel、数据库、文本文件等多种格式的数据,Julius AI 会自动分析这些数据并提供详细的解释和可视化图表。官网显示它目前已经有三十万用户。它也支持手机版。 虽然openai也支持生成图表&#xf…

研究生如何利用ChatGPT帮助开展日常科研工作?

小白可做!全自动AI影视解说一键成片剪辑工具https://docs.qq.com/doc/DYnl6d0FLdHp0V2ll 作为当代研究生,科研工作三部曲----读文献、开组会、数据分析。无论哪一个,都令研究生们倍感头疼,简直就是梦魇。每当看到导师发来的消息&a…

Redis的主要特点及运用场景

Redis的主要特点及运用场景 Redis(Remote Dictionary Server)是一个开源的高性能键值对(key-value)数据库。它支持多种类型的数据结构,如字符串(strings)、散列(hashes&…

CS61b学习 part 2

cscircles.cemc.uwaterloo.ca/java_visualize/#modedisplay public class ClassNameHere {public static void main(String[] args) {Walrus a new Walrus(1000, 8.3);Walrus b;b a;/*由于缺少函数,导致两个对象指向的是同一份*/b.weight 5;System.out.println(…

通俗易懂的Latex使用步骤

目录 Latex的安装和基本框架 TeX Live和TeXstudio的安装 Latex基本框架 标题 目录 列表 字体设置 图片 单张图片 多张图片(以两张图片为例): 多张图片(以三张图片为例): 公式 公式复制神器: …

全网最适合入门的面向对象编程教程:53 Python字符串与序列化-字符串与字符编码

全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码 摘要: 在 Python 中,字符串是文本的表示,默认使用 Unicode 编码,这允许你处理各种字符集,字符编码是将字符转换为字节的规则…

第五部分:3---信号的介绍、产生、保存、处理

目录 信号的概念: 异步的概念: 信号的3种处理方式: 修改2号信号为自定义信号处理: ​编辑 信号捕捉后恢复和信号的忽略: 信号的分类与编号: 特殊的信号: 进程信号表的继承:…

标准 I/O

标准 I/O 引言 I/O 是一切实现的基础,其分为标准 I/O 和文件 I/O。 文件 I/O 依赖操作系统,因系统的实现方式而定,对于程序员来说会造成很大困扰。如打开文件,Linux 系统调用为 open() 函数,而 Windows 的系统调用为…

在新ARM板上移植U-Boot和Linux指南

序言 从支持一个定制板子在U-Boot和Linux中的过程中得到经验以一个带有知名SoC(i.MX6)且IP已经得到支持的板子为例,这次讨论几乎不涉及编码技能,更多地聚焦在U-Boot部分 一般原则 如果您有您的BSP(板级支持包&#…

推荐、nlp、算法题等相关复习(0922-0929)

1. 算法题:路径总和三 求一棵树中所有路径和为targetsum的值,其实有点像和为k的数组,用前缀和来做 先求出前缀和数组,再类似两数之和问题,每次插入一个数,如果target-当前数在哈希表里存在,更…