forked from ohm-softa/ohm-softa.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
08s-singleton-factory-strategy-command.html
161 lines (109 loc) · 3.4 KB
/
08s-singleton-factory-strategy-command.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
---
layout: presentation
title: Singleton, Factory, Strategy, Command
permalink: /08s-singleton-factory-strategy-command/
---
layout: true
<footer>
<span class="icon github">
<svg version="1.1" class="github-icon-svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path fill-rule="evenodd" clip-rule="evenodd" fill="#C2C2C2" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/>
</svg>
</span>
<a href="https://github.com/sikoried"><span class="username">sikoried</span></a>
</footer>
---
# Design Patterns, pt. 2
## Singleton, Factory
## Strategy, Command
Korbinian Riedhammer
---
# Singleton
---
# Singleton
Structure to enforce the use of a _unique_ instance.
![dp-singleton](/assets/dp-singleton.svg)
---
# Strategy
---
# Strategy
![kara-explore](/assets/kara-explore.png)
---
# Strategy
```java
public class Kara extends JavaKaraProgram {
public static void main(String[] args) throws Exception {
Kara k = new Kara();
k.run("src/main/resources/world2.world");
}
@Override
public void myMainProgram() {
kara.move(); // one step forward
kara.turnLeft(); // you guessed it...
kara.turnRight(); // turn right
kara.treeFront(); // tree ahead?
kara.putLeaf(); // take a clover leaf
kara.removeLeaf(); // remove a clover leaf
}
}
```
How place leafs on every field?
---
# Strategy
Mechanism to provide different implementations to achieve the same outcome.
![dp-strategy](/assets/dp-strategy.svg)
---
# Factory
---
# Factory
Composite pattern:
```json
{
"key": "value",
"nested": {
"key": "value"
}
}
```
```xml
<element>
<key>value</key>
<element>
<key>value</key>
</element>
</element>
```
---
# Factory
```java
interface Component {
String toString();
}
interface Composite extends Component {
void add(Component c);
}
interface Leaf extends Component {
}
```
```java
JsonComposite root = new JsonComposite("root");
root.add(new JsonLeaf("key", "value"));
Composite nested = new JsonComposite("nested");
nested.add(new JsonLeaf("key", "value"));
root.add(nested);
System.out.println(root);
// "root": {"key": "value", "nested": {"key": "value"}}
```
---
# Factory
Structure to enforce the use of abstract factories and products, by hiding the actual instantiation of the concrete factory and products.
![dp-factory](/assets/dp-abstract-factory.svg)
---
# Command
---
# Command
.w40[
<img class="float-left" src="/assets/dp-command.svg">
]
Mechanism to organize, execute and undo operations on certain objects.