Skip to content

Commit 6012471

Browse files
committed
备忘录模式
1 parent f5b1101 commit 6012471

File tree

4 files changed

+142
-0
lines changed

4 files changed

+142
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.anxpp.designpattern.memento;
2+
//备忘录模式
3+
public class BlackMemento {
4+
public static void main(String[] args) {
5+
BlankOriginator originator = new BlankOriginator(); //发起人
6+
BlackCaretaker caretaker = new BlackCaretaker(); //负责人
7+
originator.setState("stateOne"); //设置状态
8+
caretaker.saveMemento(originator.createMemento()); //保存信息
9+
originator.setState("stateTwo"); //修改状态
10+
originator.recoverMemento(caretaker.recoverMemento());//恢复状态
11+
}
12+
}
13+
interface MementoIF {}
14+
//发起人
15+
class BlankOriginator {
16+
private String state;
17+
public String getState() {
18+
return state;
19+
}
20+
public void setState(String state) {
21+
this.state = state;
22+
}
23+
public MementoIF createMemento(){
24+
return new Memento(state);
25+
}
26+
public void recoverMemento(MementoIF memento){
27+
this.setState(((Memento)memento).getState());
28+
}
29+
//以内部类实现备忘录角色
30+
private class Memento implements MementoIF{
31+
private String state;
32+
private Memento(String state){
33+
this.state = state;
34+
}
35+
private String getState() {
36+
return state;
37+
}
38+
}
39+
}
40+
//负责人
41+
class BlackCaretaker {
42+
private MementoIF memento;
43+
public MementoIF recoverMemento(){
44+
return memento;
45+
}
46+
public void saveMemento(MementoIF memento){
47+
this.memento = memento;
48+
}
49+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.anxpp.designpattern.memento;
2+
//自述历史备忘录
3+
public class MementoSelf {
4+
public static void main(String[] args) {
5+
OriginatorCaretaker originatorCaretaker = new OriginatorCaretaker();//发起人,同时为负责人
6+
originatorCaretaker.changeState("stateOne"); //改变状态
7+
IMemento memento = originatorCaretaker.createMemento(); //保存状态
8+
originatorCaretaker.changeState("stateTwo"); //改变状态
9+
originatorCaretaker.recoverMemento(memento); //恢复状态
10+
}
11+
}
12+
interface IMemento {}
13+
//发起人兼负责人
14+
class OriginatorCaretaker {
15+
public String state;
16+
public void changeState(String state){
17+
this.state = state;
18+
}
19+
//创造快照
20+
public Memento createMemento(){
21+
return new Memento(this);
22+
}
23+
//恢复状态
24+
public void recoverMemento(IMemento memento){
25+
Memento m = (Memento)memento;
26+
changeState(m.state);
27+
}
28+
//内部类实现备忘录
29+
private class Memento implements IMemento{
30+
private String state;
31+
private Memento(OriginatorCaretaker originatorCaretaker){
32+
this.state = originatorCaretaker.state;
33+
}
34+
}
35+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.anxpp.designpattern.memento;
2+
//简单的备忘录模式
3+
public class SimpleMemento {
4+
public static void main(String[] args) throws Exception {
5+
Originator originator = new Originator(); //发起人,要被保存的对象,也是他创建要保存的信息的
6+
Caretaker caretaker = new Caretaker(); //辅助保存的对象
7+
originator.setState("stateOne"); //设置状态
8+
caretaker.saveMemento(originator.createMemento()); //保存状态
9+
originator.setState("stateTwo"); //修改状态
10+
originator.recoverMemento(caretaker.recoverMemento()); //恢复状态
11+
}
12+
}
13+
//发起人
14+
class Originator {
15+
private String state;
16+
public Memento createMemento(){
17+
return new Memento(state);
18+
}
19+
public void recoverMemento(Memento memento){
20+
this.state = memento.getState();
21+
}
22+
public String getState() {
23+
return state;
24+
}
25+
public void setState(String state) {
26+
this.state = state;
27+
}
28+
}
29+
//备忘录
30+
class Memento {
31+
private String state;
32+
public Memento(String state){
33+
this.state = state;
34+
}
35+
public String getState() {
36+
return state;
37+
}
38+
public void setState(String state) {
39+
this.state = state;
40+
}
41+
}
42+
//负责人
43+
class Caretaker {
44+
private Memento memento;
45+
public Memento recoverMemento() throws Exception{
46+
if(memento==null)
47+
throw new Exception("没有保存的状态");
48+
return this.memento;//恢复状态
49+
}
50+
public void saveMemento(Memento memento){
51+
this.memento = memento;//保存状态
52+
}
53+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* @author Administrator
3+
* 备忘录模式
4+
*/
5+
package com.anxpp.designpattern.memento;

0 commit comments

Comments
 (0)