设计模式、系统设计 record part02
软件设计模式
:
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
相关文章:

设计模式、系统设计 record part02
软件设计模式: 1.应对重复发生的问题 2.解决方案 3.可以反复使用 1.本质是面向对象 2.优点很多 1.创建型-创建和使用分离 2.结构型-组合 3.行为型-协作 571123种模式 UML-统一建模语言-Unified Modeling Language 1.可视化,图形化 2.各种图(9…...

github双重验证(2FA)启用方法
一、双重验证-2FA 在去年看到过说github启用双重验证的通知,觉得做为一个普通开发者,可能没有这么快会要求启用。结果,今天早晨一来就收到了邮件,要求说在11月底完成2FA的认证,否则权限受限。真是无了语。所谓2FA好理…...

《Linux从小白到高手》理论篇:Linux的系统服务管理
值此国庆佳节,深宅家中,闲来无事,就多写几篇博文。本篇详细深入介绍Linux的系统服务管理。 系统服务通常在系统启动时自动启动,并在后台持续运行,为系统和用户提供特定的功能。例如,网络服务、打印服务、数…...

SQL中如何进行 ‘’撤销‘’ 操作-详解
在 SQL 中,撤销已经执行的操作通常涉及两个主要的概念:事务控制和回滚操作。 ### 1. 事务控制 在支持事务的数据库管理系统(如 MySQL 的 InnoDB 引擎)中,您可以使用事务来确保数据的完整性。事务可以确保一系列的操作…...

Hadoop之WordCount测试
1、Hadoop简介: Hadoop是Apache旗下的一个用Java语言实现的开源软件框架,是一个开发和运行处理大规模数据的软件平台。 Hadoop的核心组件包括Hadoop分布式文件系统(HDFS)和MapReduce编程模型。HDFS是一个高度容错的系统…...

Vue和axios零基础学习
Vue的配置与项目创建 在这之前要先安装nodejs 安装脚手架 官网 Home | Vue CLI (vuejs.org) 先运行,切换成淘宝镜像源,安装速度更快 npm config set registry http://registry.npm.taobao.org 创建项目 用编译器打开一个空文件,在终端输入…...

STM32新建工程-基于库函数
目录 一、创建一个新工程 二、为工程添加文件和路径 三、创建一个main.c文件,并调试 四、修改一些配置 五、用库函数进行写程序 1、首先加入一些库函数和头文件 2、编写库函数程序 一、创建一个新工程 我这里选择STM32F103C8的型号,然后点击OK。 …...

matlab入门学习(二)矩阵、字符串、基本语句、函数
一、矩阵 1、矩阵生成 %矩阵生成%直接法 A[1,2,3; 4,5,6; 7,8,9]%冒号一维矩阵:开始,步长,结束(步长为1时可以省略) B1:1:10 B1:10 %函数法%linspace(开始,结束,元素个数),等差生成…...

PC端微信小程序如何调试?
向往常一样运行开微信小程序开发者工具 如果只弹出pc端小程序,没有出现调试的界面:点击胶囊按钮的三个…选择重新进入小程序 即可依次展开相应的功能调试,改完代码没反应再刷新看看,再没反应就再次重新点击编译并自动调试。...

点击按钮提示气泡信息(Toast)
演示效果: 目录结构: activity_main.xml(布局文件)代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:…...

【易社保-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...

155. 最小栈
思路 按栈的特点:顶部即列表尾部 class MinStack(object):def __init__(self):self.stack[]def push(self, val):""":type val: int:rtype: None"""self.stack.append(val)def pop(self):""":rtype: None"&quo…...

用Manim实现高尔顿板(Galton Board)
高尔顿板的介绍 高尔顿板(Galton Board),有时也称为贝尔图(Bean Machine),是由英国统计学家弗朗西斯高尔顿(Francis Galton)于19世纪末发明的一种物理装置,用于演示随机分…...

OpenCV视频I/O(7)视频采集类VideoCapture之初始化视频捕获设备或打开一个视频文件函数open()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 为视频捕获打开一个视频文件、捕获设备或 IP 视频流。 这是一个重载成员函数,提供给用户方便使用。它与上述函数的不同之处仅在于它所…...

vue3+vite@4+ts+elementplus创建项目详解
1、第一步创建项目cnpm init vite4 2、设置vue3.2局域网可访问配置: 找到项目路径下的package.json目录下找到script对象下面添加一下代码: "serve": "vite --host 0.0.0.0" 启动项目命令不在是dev而是:cnpm run serve 3…...

Python 从入门到实战34(实例2:绘制蟒蛇)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库MySQL操作的相关知识。今天学习一个使用…...

Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误
Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件,但 ADCP 后处理软件无法写入信息2.3…...

JAVA实现大写金额转小写金额
在金融行业中经常需要把大写金额转成小写金额,之前在一次开发中有个类似的需求,翻阅了好多博文,都没找到合适的,故没办法,就花了点时间研究并实现! 实现代码如下: private static final Character ZERO 零;private s…...

如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
TOC ssm779基于SSM的宠物服务平台的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&#x…...

【C++学习笔记 21】C++中的动态数组 vertor
静态数组 首先来创建一个静态数组 #include <iostream> #include <string>struct Vertex {float x, y, z; };std::ostream& operator<<(std::ostream& stream, const Vertex& vertex) {stream << vertex.x << "," <&…...

MongoDB 快速入门+单机部署(附带脚本)
目录 介绍 体系结构 数据模型 BSON BSON 数据类型 特点 高性能 高可用 高扩展 丰富的查询支持 其他特点 部署 单机部署 普通安装 脚本安装 Docker Compose 安装 卸载 停止 MongoDB 删除包 删除数据目录 参考: https://docs.mongoing.com/ 介绍…...

组合数求法汇总
一:递推求解 对于组合数,有此式: C n m C n − 1 m − 1 C n − 1 m C_{n}^{m}C_{n-1}^{m-1}C_{n-1}^{m} CnmCn−1m−1Cn−1m。 C n m C_{n}^{m} Cnm 可理解为 n n n 个数中选 m m m 个,不同的方案。对于第 n n n 个…...

Python知识点:在Python编程中,如何使用Joblib进行并行计算
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! Joblib是一个Python库,它被设计用来提供轻便的并行计算解决方案&…...

matlab-对比两张图片的CIElab分量的差值并形成直方图
%对比两张图片的CIElab分量的差值并形成直方图,改个路径就能用,图片分辨率要一致 close all; clear all; clc; I1imread(E:\test\resources\image\1.jpg); I2imread(E:\test\resources\image\2.jpg); lab1 rgb2lab(I1); lab2 rgb2lab(I2); % 提取色度…...

(十七)、Mac 安装k8s
文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功,可以在浏览器访问3.2、如果没有跳转,需要单独安装 kubernetes-dashboard3.2.1、方式一:一步到位3.2.2、方式二:逐步进行 1、Enab…...

信息学奥赛一本通 2087:【22CSPJ普及组】解密(decode) | 洛谷 P8814 [CSP-J 2022] 解密
【题目链接】 洛谷 P8814 [CSP-J 2022] 解密 ybt 2087:【22CSPJ普及组】解密(decode) 【题目考点】 1. 数学:一元二次方程求根 【解题思路】 输入n,d,e,满足 n p ∗ q np*q np∗q e ∗ d ( p − 1 ) ( q − 1…...

【重学 MySQL】四十八、DCL 中的 commit 和 rollback
【重学 MySQL】四十八、DCL 中的 commit 和 rollback commit的定义与作用rollback的定义与作用使用场景相关示例注意事项DDL 和 DML 的说明 在MySQL中,DCL(Data Control Language,数据控制语言)用于管理数据库用户和控制数据的访问…...

Java面试八股之认证授权
一、概念: 1、什么是认证?什么是授权? 认证 用于在系统登录时,验证身份的凭证,类似于账号、密码等。 授权 用户在访问资源时,根据权限的不同对资源访问程度不同。 2、什么是cookie?什么是…...

RCE_绕过综合
<aside> 💡 管道符 </aside> <aside> 💡 通配符绕过 </aside> **匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个)? 匹配任何一个字符(不…...

关于Generator,async 和 await的介绍
在本篇文章中我们主要围绕下面几个问题来介绍async 和await 🍰Generator的作用,async 及 await 的特点,它们的优点和缺点分别是什么?await 原理是什么? 📅我的感受是我们先来了解Generator,在去…...