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

相关推荐
xlsw_42 分钟前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹2 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭2 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫2 小时前
泛型(2)
java
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
南宫生2 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石3 小时前
12/21java基础
java
李小白663 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp3 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶3 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb