메멘토 패턴: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
1 개의 출처 구조, 0 개의 링크를 깨진 것으로 표시) #IABot (v2.0.1
TedBot (토론 | 기여)
잔글 봇: 틀 이름 및 스타일 정리
8번째 줄:
메멘토<ref name="GoF">{{서적 인용|author1=Erich Gamma|author2=Richard Helm|author3=Ralph Johnson|author4=John Vlissides|title=Design Patterns: Elements of Reusable Object-Oriented Software|year=1994|publisher=Addison Wesley|isbn=0-201-63361-2|pages=283ff}}</ref> 디자인 패턴은 유연하고 재사용 가능한 객체 지향 소프트웨어를 설계하기 위해 반복되는 디자인 문제를 해결하는 방법, 즉 객체는 구현, 변경, 테스트, 재사용이 쉬워야 한다는 것을 기술하는, 잘 알려진 23가지 [[디자인 패턴 (책)|GoF 디자인 패턴]]들 중 하나이다. 메멘토 패턴은 초기 HP 제품을 위해 Noah Thompson과 Dr.Drew Clinkenbeard에 의해 제작되었다.
 
<big>메멘토 디자인 패턴이 해결할 수 있는 문제는 무엇인가?</big> <ref>{{웹 인용|url=http://www.w3sdesign.com/|제목=The GoF Design Patterns Memory - Learning Object-Oriented Design & Programming|언어=en|확인날짜=2019-07-23}}</ref>
 
* 객체의 내부 상태가 외부적으로 저장되어야 이후에 객체가 그 상태를 복구할 수 있다.
54번째 줄:
''// The class could also contain additional data that is not part of the''
''// state saved in the memento..''
 
'''public''' void set(String state) {
'''this'''.state = state;
System.out.println("Originator: Setting state to " + state);
}
 
'''public''' Memento saveToMemento() {
System.out.println("Originator: Saving to Memento.");
'''return''' '''new''' Memento('''this'''.state);
}
 
'''public''' void restoreFromMemento(Memento memento) {
'''this'''.state = memento.getSavedState();
System.out.println("Originator: State after restoring from Memento: " + state);
}
 
'''public''' '''static''' '''class''' '''Memento''' {
'''private''' '''final''' String state;
 
'''public''' Memento(String stateToSave) {
state = stateToSave;
}
 
''// accessible by outer class only''
'''private''' String getSavedState() {
83번째 줄:
}
}
 
'''class''' '''Caretaker''' {
'''public''' '''static''' void main(String[] args) {
List<Originator.Memento> savedStates = '''new''' ArrayList<Originator.Memento>();
 
Originator originator = '''new''' Originator();
originator.set("State1");
96번째 줄:
savedStates.add(originator.saveToMemento());
originator.set("State4");
 
originator.restoreFromMemento(savedStates.get(1));
}
}
126번째 줄:
3 '''public''' string String1 { '''get'''; '''set'''; }
4 '''public''' string String2 { '''get'''; '''set'''; }
5
6 '''public''' OriginalObject(string str1, string str2)
7 {
132번째 줄:
9 '''this'''.String2 = str2;
10 }
11
12 '''public''' '''void''' SetMemento(Memento memento)
13 {
138번째 줄:
15 '''this'''.String2 = memento.string2;
16 }
17
18 '''public''' Memento CreateMemento()
19 {
144번째 줄:
21 }
22 }
23
24 ''//Memento object''
25 '''public''' '''class''' '''Memento'''
150번째 줄:
27 '''public''' '''readonly''' string string1;
28 '''public''' '''readonly''' string string2;
29
30 '''public''' Memento(string str1, string str2)
31 {
157번째 줄:
34 }
35 }
36
37 ''//CareTaker Object''
38 '''public''' '''class''' '''CareTaker'''
163번째 줄:
40 '''public''' Memento Memento { '''get'''; '''set'''; }
41 }
42
43 ''//Client''
44 '''class''' '''Program'''
169번째 줄:
46 '''static''' '''void''' Main(string[] args)
47 {
48 ''// Create Originator object which container first state of "First" and "One".''
49 ''// The Memento will remember these value.''
50 OriginalObject original = '''new''' OriginalObject("First", "One");
51
52 ''// Create first State and store to caretaker''
53 Memento firstMemento = original.CreateMemento();
54 CareTaker caretaker = '''new''' CareTaker();
55 caretaker.Memento = firstMemento;
56
57 ''// Change into second state; "Second" and "Two".''
58 original.String1 = "Second";
59 original.String2 = "Two";
60
61 ''// Retrieve back first State''
62 original.SetMemento(caretaker.Memento);
63
64 }
65 }
192번째 줄:
''Memento pattern example.''
''"""''
 
'''class''' '''Memento'''(object):
'''def''' __init__(self, state):
self._state = state
 
'''def''' get_saved_state(self):
'''return''' self._state
 
'''class''' '''Originator'''(object):
_state = ""
 
'''def''' set(self, state):
'''print'''("Originator: Setting state to", state)
self._state = state
 
'''def''' save_to_memento(self):
'''print'''("Originator: Saving to Memento.")
'''return''' Memento(self._state)
 
'''def''' restore_from_memento(self, memento):
self._state = memento.get_saved_state()
'''print'''("Originator: State after restoring from Memento:", self._state)
 
 
saved_states = []
originator = Originator()
221번째 줄:
originator.set("State2")
saved_states.append(originator.save_to_memento())
 
originator.set("State3")
saved_states.append(originator.save_to_memento())
 
originator.set("State4")
 
originator.restore_from_memento(saved_states[0])