设计模式、系统设计 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

相关推荐
岁岁岁平安1 分钟前
Java基础(Arrays工具类)(asList()方法)(详细)
java·开发语言·集合·arrays·aslist
窦再兴2 分钟前
关于Java中的List<User>如何进行深拷贝
java·list
WHabcwu12 分钟前
Spring Web MVC⼊⻔
java·后端·spring·mvc
coffee_baby14 分钟前
《解锁高效流程设计:深度剖析责任链模式与实战应用》
java·开发语言·责任链模式
customer0817 分钟前
【开源免费】基于SpringBoot+Vue.JS服装销售平台(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
晴子呀20 分钟前
一个有趣的编程题实战----交替打印线程
java·开发语言
叶辰 .38 分钟前
POI获取模板文件,替换数据横纵动态表格、折线图、饼状图、折线饼状组合图
java
胡净1 小时前
java并发线程02
java·开发语言
OLDERHARD1 小时前
Java — LeetCode 面试经典150题(一)
java·算法·leetcode
聆听HJ2 小时前
Java日期格式化注解@DateTimeFormat和@JsonFormat
java·开发语言