Luckylau's Blog

Keep Moving, Keep Learning


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索
close
Luckylau's Blog

设计模式之访问者模式

发表于 2022-05-28 | 分类于 java

​ 在访问者模式(Visitor Pattern)中,通过一个访问者类,来封装对数据结构中不同类型元素的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。

​ 我们假设有一些形状,包括三角形、矩形和圆形这三种不同的几何形状。我们知道不同的形状其参数是不同的:三角形:三条边的长度确定一个三角形;矩形:长和宽确定一个矩形;圆形就一个参数——半径。
那么任务来了,我们把一系列类型和参数不同的形状用ArrayList来管理,然后依次遍历,并计算出它们的周长。

阅读全文 »
Luckylau's Blog

设计模式之备忘录模式

发表于 2022-05-28 | 分类于 java

​ 备忘录模式(Memento pattern)又叫快照模式(Snapshot pattern),是对象的行为模式。用于保存一个对象的某个状态,以便在适当的时候恢复对象。

​ 虚拟机估计大多数人都用过,虚拟机有一个很不错的功能就是“打快照”,把系统调到最舒服的状态,装好该装的软件,然后打个快照,就可以把当前的系统状态保存下来,一旦哪一天系统搞坏了,再用这个快照恢复一下就好了。虚拟机可以在开机和关机状态下打快照。关机状态下,保存虚拟磁盘的状态就好了,就像我们物理机把硬盘保存好,换到别的物理机上启动;开机状态下,除了虚拟磁盘的存储快照,还会将内存的状态保存为内存快照到物理存储上,恢复快照后的系统仍然是运行中的状态,内存快照会重新加载到内存中,因此所打开的应用会继续快照时候的状态执行,就像物理机的休眠。如果要模拟这个过程,就可以使用备忘录模式/快照模式(以下叫“快照模式”吧)。

阅读全文 »
Luckylau's Blog

设计模式之调停者模式

发表于 2022-05-28 | 分类于 java

​ 调停者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性的。这种模式提供了一个调停者类,用来充当“中心化”或“总线化”的角色,与各个对象通信,从而避免了其他对象之间的互相通信,从而降低了耦合度。

​ 生活中调停者模式的例子是相当常见的,一个是讲到调停者模式就避不开的关于同事之间沟通的例子。当我们身处一个大的团队中的时候,如果工作内容涉及许多同事,那么再互相沟通显然成本比较高。比如张三要结婚请婚假,手中的工作要暂时交接给李四、王五等五六个同事,分别跟他们单独沟通多麻烦,那么直接告知组长或经理就好了,由组长或经理协调一下工作给其他同事即可;你可能会说,沟通软件拉个群通知一下不行吗,当然可以,那这个时候,这个群就相当于一个“调停者”,任何人发送的消息都汇总到群里,其他群会员都可以收到消息。

阅读全文 »
Luckylau's Blog

设计模式之解释器模式

发表于 2022-05-28 | 分类于 java

​ 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。

​ 下面以2+3-4/2为例子说明:

1
2
3
public interface Expression {
int interpret();
}

对于叶子节点的数字,也就是终结符表达式来说:

阅读全文 »
Luckylau's Blog

设计模式之迭代器模式

发表于 2022-05-28 | 分类于 java

​ 迭代器(Iterator)模式又叫游标(Cursor)模式,通常用于集合类型来提供一种顺序访问其中元素而又不必暴漏集合的内部结构,是一种行为模式。

其中的Iterator就是迭代器,它有两个核心方法:

1
2
3
4
public interface Iterator<E> {
boolean hasNext();
E next();
}
阅读全文 »
Luckylau's Blog

设计模式之享元模式

发表于 2022-05-22 | 分类于 java

​ 享元模式(Flyweight Pattern)以共享的方式支持大量的细粒度的对象。尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。从而减少创建对象的数量和内存占用量,提高性能。这种类型的设计模式属于结构型模式。

​ 首先了解两个概念:内部状态、外部状态。内部状态:在享元对象内部不随外界环境改变而改变的共享部分。外部状态:随着环境的改变而改变,不能够共享的状态就是外部状态。由于享元模式区分了内部状态和外部状态,所以我们可以通过设置不同的外部状态使得相同的对象可以具备一些不同的特性,而内部状态设置为相同部分。

阅读全文 »
12…36
Luckylau

Luckylau

人生识字忧患始

215 日志
14 分类
33 标签
GitHub Weibo
© 2017 - 2022 Luckylau
由 Hexo 强力驱动
主题 - NexT.Pisces