File tree Expand file tree Collapse file tree 4 files changed +142
-0
lines changed
src/com/anxpp/designpattern/memento Expand file tree Collapse file tree 4 files changed +142
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 1+ /**
2+ * @author Administrator
3+ * 备忘录模式
4+ */
5+ package com .anxpp .designpattern .memento ;
You can’t perform that action at this time.
0 commit comments