File tree 7 files changed +190
-0
lines changed 7 files changed +190
-0
lines changed Original file line number Diff line number Diff line change
1
+ # memento
2
+
3
+ This is repository of http://androidcode.pl blog. It shows uses of Memento in Android. It is a part of Design Patterns - Memento post in the blog.
Original file line number Diff line number Diff line change
1
+ public class Document {
2
+
3
+ private String text ;
4
+ private String name ;
5
+ private long timestamp ;
6
+
7
+ public Answer (String name ) {
8
+ this .name = name ;
9
+ this .text = "" ;
10
+ this .timestamp = System .currentTimeMillis ();
11
+ }
12
+
13
+ public void setText (String text ) {
14
+ this .text = text ;
15
+ this .timestamp = System .currentTimeMillis ();
16
+ }
17
+
18
+ public void setName (String name ) {
19
+ this .name = name ;
20
+ this .timestamp = System .currentTimeMillis ();
21
+ }
22
+
23
+ public Memento save () {
24
+ return new Memento (name , text , timestamp );
25
+ }
26
+
27
+ public void restore (Memento memento ) {
28
+ this .name = memento .name ;
29
+ this .text = memento .text ;
30
+ this .timestamp = memento .timestamp ;
31
+ }
32
+
33
+ class Memento {
34
+
35
+ private String name ;
36
+ private String text ;
37
+ private long timestamp ;
38
+
39
+ public Memento (String name , String text , long timestamp ) {
40
+ this .name = name ;
41
+ this .text = text ;
42
+ this .timestamp = timestamp ;
43
+ }
44
+
45
+ public String getText () {
46
+ return text ;
47
+ }
48
+
49
+ public int getOption () {
50
+ return option ;
51
+ }
52
+ }
53
+ }
Original file line number Diff line number Diff line change
1
+ public class DocumentManager {
2
+
3
+ private List <Memento > mementos = new ArrayList <>();
4
+ private int current = 0 ;
5
+
6
+ public void add (Memento memento ) {
7
+ mementos .add (memento );
8
+ current ++;
9
+ }
10
+
11
+ public Memento redo () {
12
+ if (current < mementos .size () - 1 )
13
+ current += 1 ;
14
+ return mementos .get (current );
15
+ }
16
+
17
+ public Memento undo () {
18
+ if (current > 0 )
19
+ current -= 1 ;
20
+ return mementos .get (current );
21
+ }
22
+
23
+ public Memento get (int number ) {
24
+ if (number >= 0 && number < mementos .size ())
25
+ return mementos .get (number );
26
+ else
27
+ return mementos .get (current );
28
+ }
29
+
30
+ public int historySize () {
31
+ return mementos .size ();
32
+ }
33
+ }
Original file line number Diff line number Diff line change
1
+ public class Main {
2
+
3
+ public static void main () {
4
+ //user open writer editor and create new empty file
5
+ DocumentManager manager = new DocumentManager ();
6
+ Document document = new Document ("CV.doc" );
7
+
8
+ //user wrote some text into document
9
+ decument .setText ("Begin of the text document." );
10
+
11
+ //user wrote more text
12
+ document .setText ("Begin of the text document. More text wrote here." );
13
+ //autosave executed
14
+ manager .add (document .save ()); //first document snapshot
15
+
16
+ //user change document name and wrote more text
17
+ document .setName ("CV_ENG.doc" );
18
+ document .setText ("Begin of the text document. More text wrote here. And more text again." )
19
+ //autosave executed
20
+ manager .add (document .save ()); //second document snapshot
21
+
22
+ //user removed whole text and typed new one
23
+ document .setText ("Text wrote again." );
24
+ //manual save executed
25
+ manager .add (document .save ()); //third document snapshot
26
+
27
+ //after some while user decide to restore previous document snapshot
28
+ document .restore (manager .undo ());
29
+
30
+ //user can write text and undo, redo or choose concrete document snapshot to revert state
31
+ }
32
+ }
Original file line number Diff line number Diff line change
1
+ public class Caretaker {
2
+
3
+ private List <Memento > mementos = new ArrayList <>();
4
+
5
+ public void add (Memento memento ) {
6
+ mementos .add (memento );
7
+ }
8
+
9
+ public Memento get (int index ) {
10
+ return mementos .get (index )
11
+ }
12
+
13
+ public int getSize () {
14
+ return mementos .size ();
15
+ }
16
+ }
Original file line number Diff line number Diff line change
1
+ public class Main {
2
+
3
+ public static void main () {
4
+ Originator originator = new Originator ();
5
+ Caretaker caretaker = new Caretaker ();
6
+
7
+ //first step, no need to add to the history
8
+ originator .setState ("State1" );
9
+
10
+ //next step, need to add to the history
11
+ originator .setState ("State2" );
12
+ caretaker .add (originator .save ()); //State2 has been saved
13
+
14
+ //next step, also need to save
15
+ originator .setState ("State3" );
16
+ caretaker .add (originator .save ()); //State3 has been saved
17
+
18
+ //next step, no need to save
19
+ originator .setState ("State4" );
20
+
21
+ //user decide to back step so previous state restore
22
+ originator .restore (caretaker .get (caretaker .getSize () - 1 ));
23
+ }
24
+ }
Original file line number Diff line number Diff line change
1
+ public class Originator {
2
+
3
+ private String state ;
4
+
5
+ public void setState (String state ) {
6
+ this .state = state ;
7
+ }
8
+
9
+ public Memento save () {
10
+ return new Memento (state );
11
+ }
12
+
13
+ public void restore (Memento memento ) {
14
+ state = memento .getState ();
15
+ }
16
+
17
+ class Memento {
18
+
19
+ private String state ;
20
+
21
+ public Memento (String state ) {
22
+ this .state = state ;
23
+ }
24
+
25
+ public String getState () {
26
+ return state ;
27
+ }
28
+ }
29
+ }
You can’t perform that action at this time.
0 commit comments