设计模式、系统设计 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 << "," <&…...
如何通过技术优化提升百度网盘macOS版下载体验
如何通过技术优化提升百度网盘macOS版下载体验 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 对于macOS用户来说,百度网盘下载速度限制一直…...
帮孩子建立时间观念:从认识“十分钟有多长”开始
很多家长都遇到过这样的困扰:让孩子“再玩十分钟就吃饭”,结果十分钟后他完全没反应,不是故意拖延,而是他真的不知道十分钟有多长。时间对孩子来说是抽象的,看不见摸不着。要帮孩子建立时间观念,不妨从感受…...
抖音视频批量下载工具终极指南:3分钟实现高效无水印下载
抖音视频批量下载工具终极指南:3分钟实现高效无水印下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback sup…...
i.MX6ULL电容触摸驱动开发:从硬件原理到Linux输入子系统实战
1. 项目概述:从零到一,搞定i.MX6ULL电容触摸最近在搞一个基于i.MX6ULL的工控HMI项目,客户要求界面操作必须流畅跟手,这就对触摸屏的响应速度和精度提出了硬性要求。市面上很多现成的模块要么驱动兼容性差,要么调试信息…...
如何用Perplexity秒级获取NCBI/UniProt/PDB关联知识?——生物学家正在悄悄使用的4层语义穿透法
更多请点击: https://intelliparadigm.com 第一章:如何用Perplexity秒级获取NCBI/UniProt/PDB关联知识?——生物学家正在悄悄使用的4层语义穿透法 Perplexity 不是传统搜索引擎,而是面向科研语义网络的推理型知识代理。当输入一个…...
自动化 Vue 3 转 React 编译工具 VuReact 连续迭代,全量编译速度提升 30%-40%
近期,自动化 Vue 3 转 React 编译工具 VuReact 完成 v1.8.0、v1.8.1、v1.8.3 连续迭代,围绕性能、稳定性、开发体验深度优化,降低 Vue 项目向 React 迁移门槛。更新聚焦三大方向本轮更新围绕性能、稳定性、开发体验三大方向进行深度优化。尤其…...
XC7Z010-2CLG400I Xilinx Zynq-7000 FPGA
XC7Z010-2CLG400I 可以理解为一颗“ARM 处理器 FPGA 可编程逻辑”合在一起的 SoC。它属于 Xilinx (赛灵思 AMD )Zynq-7000 家族里的 Z-7010 器件,核心特点就是把 双核 Arm Cortex-A9 MPCore 处理系统(PS) 和 7 系列可编程逻辑&am…...
别再复制粘贴了!手把手教你用C语言实现MODBUS CRC-16校验(附5种算法对比)
MODBUS CRC-16校验算法实战指南:从原理到最优实现选择 在工业自动化领域,MODBUS协议因其简单可靠而广泛应用,而CRC-16校验则是保障数据完整性的关键环节。许多开发者习惯直接复制网络上的校验代码,却常常遇到内存溢出、性能瓶颈或…...
不只是定位:教你用开源GNSS/INS平台玩转多传感器融合与抗干扰
不只是定位:开源GNSS/INS平台的多传感器融合与抗干扰实战指南 在自动驾驶、无人机和机器人领域,精准的定位与导航系统是核心竞争力的体现。传统单一GNSS系统在城市峡谷、电磁干扰等复杂环境下表现往往不尽如人意,而单纯依赖惯性导航系统(INS)…...
如何用5分钟将B站视频变成文字稿:bili2text终极指南
如何用5分钟将B站视频变成文字稿:bili2text终极指南 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾经为了整理B站视频笔记而反复暂停、回…...














































