- 博客(53)
- 收藏
- 关注
原创 设计模式——备忘录模式
记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外。,以便以后当需要时能将该对象。该模式又叫快照模式。
2023-01-10 17:51:14 292
原创 设计模式——访问者模式
封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。:实现抽象元素角色提供的 accept() 操作,其方法体通常都是 visitor.visit(this) ,另外具体元素中可能还包含本身业务逻辑的相关操作。:定义一个访问具体元素的接口,为每个具体元素类对应一个访问操作 visit() ,该操作中的参数类型标识了被访问的具体元素。:声明一个包含接受操作 accept() 的接口,被接受的访问者对象作为 accept() 方法的参数。
2023-01-08 17:36:50 520
原创 设计模式——迭代器模式
提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。:实现抽象聚合类,返回一个具体迭代器的实例。
2023-01-04 15:06:43 511
原创 设计模式——观察者模式
指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。:它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。:实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。
2022-12-20 16:10:07 101
原创 设计模式——中介者模式
定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。中介者模式将原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系。当同事类越多时,中介者就会越臃肿,变得复杂且难以维护。当对象之间存在复杂的网状结构关系而导致依赖关系混乱且难以复用时。当想创建一个运行于多个类之间的对象,又不想生成新的子类时。
2022-12-17 00:03:45 493
原创 设计模式——状态模式
传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用 if-else 或 switch-case 语句来做状态判断,再进行不同情况的处理。且增加新的状态时要添加新的 if-else 语句,这违背了“开闭原则”,不利于程序的扩展。对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式。一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态时。
2022-12-11 13:18:34 111
原创 设计模式——职责链模式
为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。多个对象可以处理一个请求,但具体由哪个对象处理该请求在运行时自动确定。可动态指定一组对象处理请求,或添加新的处理者。需要在不明确指定请求处理者的情况下,向多个处理者中的一个提交请求。说明职责链模式存在以下两种情况:降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有
2022-12-04 00:02:56 117
原创 设计模式——策略模式
该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
2022-11-29 23:50:15 108
原创 设计模式——模板方法模式
一、基本思想定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。二、应用场景算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。当多个子类存在公共的行为时,可以将其提取出来并集中到一个公共父类中以避免代码重复。首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
2022-11-28 23:36:31 277
原创 设计模式——外观模式
又称为作门面模式通过,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
2022-11-20 21:46:53 133
原创 设计模式——桥接模式
当一个类内部具备时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。将抽象与实现分离,使它们可以独立变化。用来实现,从而降低了抽象和实现这两个可变维度的耦合度。特点:遵循了里氏替换原则和依赖倒置原则,最终实现了开闭原则,对修改关闭,对扩展开放。
2022-11-16 09:01:21 192
原创 设计模式——代理模式
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
2022-11-09 23:24:21 151
原创 设计模式——建造者模式
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
2022-11-03 16:12:00 124
原创 设计模式——原型模式
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。
2022-11-01 18:59:29 137
原创 设计模式——单例模式
一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。
2022-10-31 17:09:33 147
原创 设计模式——抽象工厂模式
为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
2022-10-28 11:29:48 525
原创 设计模式——简单工厂模式
一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。
2022-10-25 08:15:00 113
原创 设计模式——23种设计模式的分类
设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用范围来分。一、根据目的来分根据模式是用来完成什么工作来划分,这种方式可分为3种:创建型模式结构型模式行为型模式创建型模式创建型模式用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”,GoF中提供了5种创建型模式:工厂方法抽象工厂单例原型建造者结构型模式结构型模式描述如何将类或对象按某种布局组成更大的结构,GoF中提供了7种创建型模式:代理适配器桥接装饰外
2022-10-24 23:22:37 174
原创 设计模式——七大软件架构设计原则
开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合度;合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。访问加限制,函数要节俭,依赖不允许,动态加接口,父类要抽象,扩展不更改。
2022-09-28 16:48:24 443
原创 操作系统——设备管理
i. 微机I/O系统ii. 主机I/O系统1) 低速设备:传输速率为每秒钟几个字节到数百个字节的设备;键盘、鼠标、语言的输入等2) 中速设备:传输速率在每秒钟数千个字节至数十千个字节的设备;行式打印机、激光打印机等3) 高速设备:传输速率在数百千个字节至数兆字节的设备;磁带机、磁盘机、光盘机等1) 块设备:以数据块为单位来组织和传送数据信息的设备。
2022-09-04 10:25:47 602
原创 操作系统——虚拟存储器
a.:在一段时间内,程序的执行仅局限于某个部分;相应地,它所访问的存储空间也局限于某个区域内i. 局部性表现为时间局部性和空间局部性b. 虚拟存储器的定义:根据局部性原理,一个作业在运行之前,没有必要把全部作业装入内存,而仅将那些当前要运行的那部分页面或段,先装入内存便可启动运行,其余部分暂时留在磁盘上i. 虚拟存储器是具有请求调入功能和置换功能,能仅把作业的一部分装入内存便可运行作业的存储器系统,它能从逻辑上对内存容量进行扩充的一种虚拟的存储器系统i....
2022-09-01 15:34:18 460
原创 操作系统——存储器管理
主存储器的分配和回收提高主存储器的利用率,减少不可用的存储空间,允许多道程序动态共享主存存储保护内存扩充地址重定位 ~~~~~~ i. 名字空间、地址空间和存储空间: ~~~~~~ ~~~~~~ 1) 符号地址:在源程序中,通过符号名来访问子程序和数据,这些符号名实际代表了地址,称为符号地址 ~~~~~~ ~~~~~~ ~~~~~~ a) 名字空间:程序中符号名的集
2022-08-30 08:15:00 611
原创 操作系统——调度和死锁
a. 高级调度——作业调度:用于决定把外存输入井上处于作业后备队列上的哪些作业调入内存,并为它们创建进程、分配必要的资源,然后再将新创建的进程排在就绪队列上,准备执行。作业调度模型:b. 低级调度——进程调度:决定就绪队列中哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作。c. 中级调度——对换:为了提高主存利用率和系统吞吐量。任何操作系统都有进程调度。...
2022-08-28 20:37:49 450
原创 操作系统——进程的同步和通讯
多个相关进程在执行次序上的协调称为进程同步。用于保证多个进程在执行次序上的协调关系的相应机制称为进程同步机制。信号量机制a. 记录型信号机制:在信号量机制中信号量是代表资源物理实体的数据结构i. 信号量的值只能通过两个原子操作:P、V来改变,它代表分配资源和释放资源...
2022-08-27 21:36:56 492
原创 操作系统——进程的描述和控制
可并发执行的程序在一个数据集合上的运行过程。动态性:进程的最基本特征,它是程序执行过程,它是有一定的生命期~~~~~~ b. 并发性:进程和操作系统的重要特征~~~~~~ c. 独立性:进程是一个能独立运行的基本单位,而程序不能作为独立单位参加运行、获取资源~~~~~~ d. 异步性:进程按异步方式进行~~~~~~ e. 结构特征:从结构上,进程实体由程序段、数据段和进程控制块三部分组成~~~~~~ f. 生命特征:进程有一个生命周期,有
2022-08-26 17:52:37 991
原创 Java类的生命周期
在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。按照Java虚拟机规范,从class文件到加载到内存中的类,到类的卸载出内存为止,它的整个生命周期包括如下7个阶段:其中,验证、准备、解析3个部分统称为链接(Linking)
2022-08-24 21:35:46 1343
原创 JVM中的数据类型转换
a. 转换规则:Java虚拟机直接支持以下数值的宽化类型转换(widening numeric conversion,小范围类型向大范围类型的安全转换)。i. 从int类型到long、float或者double类型,对应的指令为:i2l、i2f、i2dii. 从long类型到float、double类型,对应的指令为:l2f、l2diii. 从float类型到double类型,对应的指令为:f2d。
2022-08-23 21:59:05 187
原创 Java字节码Class文件结构
iii. 不同版本的Java编译器编译的Class文件对应的版本是不一样的。i. 方法表集合之后的属性表集合,指的是Class文件所携带的辅助信息,比如该Class文件的源文件的名称,以及任何带有RetentionPolicy.CLASS或者RetentionPolicy.RUNTIME的注解。iii. 属性表集合的限制没有那么严格,不再要求各个属性表具有严格的顺序,并且只要不与已有的属性名重复,任何人实现的编译器都可以向属性表中写入自己定义的属性信息,但Java虚拟机运行时会忽略它不认识的属性。
2022-08-22 20:17:08 341
原创 从JVM层面分析String
这些类型为了使它们在运行过程中速度更快、更节省内存,都提供了一种常量池的概念。2) 字符串常量池概念原本使用得比较多,但是这个改动使得我们有足够的理由让我们重新考虑在Java 7中使用String.intern()1) 所有的字符串都保存在堆中,和其它普通对象一样,这样可以让你在进行调优应用时仅需要调整堆大小就可以了。ii. 如果不是用双引号声明的String对象,可以使用String提供的intern()方法。ii. Java 7中将字符串常量池的位置调整到Java堆中。ii. 永久代垃圾回收频率低。
2022-08-20 20:22:19 197
原创 JVM执行引擎
JVM设计者们的初衷仅仅只是单纯地为了满足Java程序实现跨平台特性,因此避免采用静态编译的方式直接生成本地机器指令,从而诞生了实现解释器在运行时采用逐行解释字节码执行程序的想法。
2022-08-19 20:20:12 303
原创 Cookie和Session
~~~Session是一个接口HttpSession;~~~~Session就是会话,它是用来维护一个客户端和服务器之间关联的一种技术;~~~~每个客户端都有自己的一个Session会话;~~~~Session会话中,我们经常用来保存用户登录之后的信息;...
2022-08-18 20:24:31 255
原创 MyBatis获取参数值的两种方式
因此只需要通过# { }和$ { }访问map集合的键就可以2获取对应的值,注意$ { }需要手动添加单引号。只需要通过$ { }和# { }访问map集合的键就可以获取相应的值,注意$ { }需要手动加单引号。若mapper接口方法的参数是是实体类类型的参数,只需要通过# { }和$ { }以属性的方式访问属性值即可,但是需要注意$ { }的单引号问题。若mapper接口中的方法参数为单个的字面量类型,此时可以使用$ { }和# { }以任意的名称获取参数的值,注意$ { }需要手动加单引号。...
2022-08-17 11:27:05 272
原创 JVM对象的实例化内存布局与访问定位
实例数据Instance Data,它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段)。好处:reference中存储稳定句柄地址,对象被移动时只会改变句柄中实例数据指针,reference本身不需要被修改。3. 如果CompactFields参数为true(默认为true):子类的窄变量可能插入到父类变量的空隙。对齐填充(Padding)不是必须的,也没有特别含义,仅仅起到占位符的作用。好处:访问效率较高,更节省空间。......
2022-08-16 09:48:56 219
原创 JVM运行时数据区之方法区
在jdk 7 及以前,习惯上把方法区称为永久代。jdk 8 开始,使用元空间取代了永久代。本质上,方法区和永久代并不等价。仅是对Hotspot而言的。《Java虚拟机规范》对如何实现方法区不做统一要求。尽管所有的方法区在逻辑上是属于堆的一部分,但在实现上我们把方法区。2)对永久代进行调优是很困难的。...
2022-08-15 19:31:11 232
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人