Skip to content

Commit f3d75a5

Browse files
author
Sebastian Boldt
committed
Added Memento Example Code to behavioral patterns
1 parent e3afea1 commit f3d75a5

File tree

4 files changed

+50
-2
lines changed

4 files changed

+50
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//: [Previous](@previous)
2+
3+
import Foundation
4+
5+
typealias Memento = NSDictionary
6+
7+
protocol MementoConvertible {
8+
init?(memento: Memento)
9+
var memento: Memento { get }
10+
}
11+
12+
struct Student: MementoConvertible {
13+
var memento: Memento {
14+
return ["name" : self.name, "age" : self.age]
15+
}
16+
17+
private var name: String
18+
private var age: Int
19+
20+
init?(memento: Memento) {
21+
guard let name = memento.object(forKey: "name") as? String else {
22+
return nil
23+
}
24+
25+
guard let age = memento.object(forKey: "age") as? Int else {
26+
return nil
27+
}
28+
29+
self.name = name
30+
self.age = age
31+
}
32+
}
33+
34+
struct Store {
35+
func store(name: String, memento: Memento) {
36+
let defaults = UserDefaults.standard
37+
defaults.set(memento, forKey: name)
38+
defaults.synchronize()
39+
}
40+
41+
func retrieveStudent(name: String) -> Memento? {
42+
let defaults = UserDefaults.standard
43+
return defaults.object(forKey: name) as? Memento
44+
}
45+
}
46+
47+
//: [Next](@next)

β€ŽBehavioral.playground/contents.xcplayground

+1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
<page name='Mediator'/>
99
<page name='Observer'/>
1010
<page name='Visitor'/>
11+
<page name='Memento'/>
1112
</pages>
1213
</playground>

β€ŽREADME.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
* βœ… Mediator
1515
* βœ… Visitor
1616
* βœ… Observer
17-
* ❌ Memento
18-
* ❌ Interpreter
17+
* βœ… Memento
1918
* ❌ State
19+
* ❌ Interpreter
2020

2121
## Creational
2222

0 commit comments

Comments
Β (0)