feat: 备忘录模式
This commit is contained in:
parent
4782334a63
commit
b90a5bef13
|
@ -1701,6 +1701,114 @@ public class PaymentProcess {
|
|||
|
||||
## 备忘录模式---行为型
|
||||
|
||||
**定义**:在不破坏封闭的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态,这样以后就将该对象恢复到原先保存的状态。
|
||||
|
||||
需要角色:Originator(发起人)、Memento(备忘录)、Caretaker(管理者)
|
||||
|
||||
备忘录可以实现功能:撤销、重做、历史记录、快照。
|
||||
|
||||
### 简单示例
|
||||
|
||||
#### 示例代码
|
||||
|
||||
```java
|
||||
public class Memo {
|
||||
public static void main(String[] args) {
|
||||
// 定义记事本
|
||||
NoteEditText noteEditText = new NoteEditText();
|
||||
|
||||
// 负责管理记事本
|
||||
NoteCaretaker noteCaretaker = new NoteCaretaker();
|
||||
|
||||
// 写入记录
|
||||
noteEditText.content = "创建第一条记录。。。";
|
||||
noteCaretaker.saveMemo(noteEditText.createMemo());
|
||||
|
||||
// 再次写入
|
||||
noteEditText.content = "第三条记录。。。";
|
||||
noteCaretaker.saveMemo(noteEditText.createMemo());
|
||||
|
||||
// 写错撤销下
|
||||
noteEditText.restoreMemo(noteCaretaker.getPrevMemo());
|
||||
}
|
||||
|
||||
// 备忘录角色-备忘录
|
||||
@Getter
|
||||
static class Memento {
|
||||
private final String content;
|
||||
|
||||
public Memento(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
}
|
||||
|
||||
// 存储备忘录--管理者
|
||||
static class NoteCaretaker {
|
||||
private final List<Memento> mementoList = new ArrayList<>();
|
||||
|
||||
// 存档位置
|
||||
private int index = 0;
|
||||
|
||||
/**
|
||||
* 添加内容到备忘录中
|
||||
*
|
||||
* @param memento 备忘录
|
||||
*/
|
||||
public void saveMemo(Memento memento) {
|
||||
mementoList.add(memento);
|
||||
index = mementoList.size() - 1;
|
||||
for (Memento memento1 : mementoList) {
|
||||
System.out.print(memento1.content + " ");
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下一个
|
||||
*
|
||||
* @return 备忘录
|
||||
*/
|
||||
public Memento getNextMemo() {
|
||||
index = index > (mementoList.size() - 1) ? index : mementoList.size() - 1;
|
||||
return mementoList.get(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取上一个
|
||||
*
|
||||
* @return 备忘录
|
||||
*/
|
||||
public Memento getPrevMemo() {
|
||||
index = index > 0 ? (index - 1) : 0;
|
||||
return mementoList.get(index);
|
||||
}
|
||||
}
|
||||
|
||||
// 负责创建备忘录-发起人
|
||||
@Data
|
||||
static class NoteEditText {
|
||||
private String content;
|
||||
|
||||
public Memento createMemo() {
|
||||
return new Memento(content);
|
||||
}
|
||||
|
||||
public void restoreMemo(Memento memento) {
|
||||
this.content = memento.content;
|
||||
System.out.println("撤销记录:" + content);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 运行结果:
|
||||
|
||||
```java
|
||||
创建第一条记录。。。
|
||||
创建第一条记录。。。 第三条记录。。。
|
||||
撤销记录:创建第一条记录。。。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 中介者模式---行为型
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
package cn.bunny.pattern12;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Memo {
|
||||
public static void main(String[] args) {
|
||||
// 定义记事本
|
||||
NoteEditText noteEditText = new NoteEditText();
|
||||
|
||||
// 负责管理记事本
|
||||
NoteCaretaker noteCaretaker = new NoteCaretaker();
|
||||
|
||||
// 写入记录
|
||||
noteEditText.content = "创建第一条记录。。。";
|
||||
noteCaretaker.saveMemo(noteEditText.createMemo());
|
||||
|
||||
// 再次写入
|
||||
noteEditText.content = "第三条记录。。。";
|
||||
noteCaretaker.saveMemo(noteEditText.createMemo());
|
||||
|
||||
// 写错撤销下
|
||||
noteEditText.restoreMemo(noteCaretaker.getPrevMemo());
|
||||
}
|
||||
|
||||
// 备忘录角色-备忘录
|
||||
@Getter
|
||||
static class Memento {
|
||||
private final String content;
|
||||
|
||||
public Memento(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
}
|
||||
|
||||
// 存储备忘录--管理者
|
||||
static class NoteCaretaker {
|
||||
private final List<Memento> mementoList = new ArrayList<>();
|
||||
|
||||
// 存档位置
|
||||
private int index = 0;
|
||||
|
||||
/**
|
||||
* 添加内容到备忘录中
|
||||
*
|
||||
* @param memento 备忘录
|
||||
*/
|
||||
public void saveMemo(Memento memento) {
|
||||
mementoList.add(memento);
|
||||
index = mementoList.size() - 1;
|
||||
for (Memento memento1 : mementoList) {
|
||||
System.out.print(memento1.content + " ");
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下一个
|
||||
*
|
||||
* @return 备忘录
|
||||
*/
|
||||
public Memento getNextMemo() {
|
||||
index = index > (mementoList.size() - 1) ? index : mementoList.size() - 1;
|
||||
return mementoList.get(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取上一个
|
||||
*
|
||||
* @return 备忘录
|
||||
*/
|
||||
public Memento getPrevMemo() {
|
||||
index = index > 0 ? (index - 1) : 0;
|
||||
return mementoList.get(index);
|
||||
}
|
||||
}
|
||||
|
||||
// 负责创建备忘录-发起人
|
||||
@Data
|
||||
static class NoteEditText {
|
||||
private String content;
|
||||
|
||||
public Memento createMemo() {
|
||||
return new Memento(content);
|
||||
}
|
||||
|
||||
public void restoreMemo(Memento memento) {
|
||||
this.content = memento.content;
|
||||
System.out.println("撤销记录:" + content);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue