Skip to content

Commit 504505f

Browse files
committed
Added Design Patterns
1 parent f1a475f commit 504505f

File tree

4 files changed

+190
-0
lines changed

4 files changed

+190
-0
lines changed

OOP/B.Design Patterns/# TODO.txt

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
from abc import ABC, abstractmethod
2+
3+
4+
class AbstractFactory(ABC):
5+
@abstractmethod
6+
def create_chair(self):
7+
raise NotImplementedError()
8+
9+
@abstractmethod
10+
def create_sofa(self):
11+
raise NotImplementedError()
12+
13+
@abstractmethod
14+
def create_table(self):
15+
raise NotImplementedError()
16+
17+
18+
class Chair:
19+
20+
def __init__(self, name):
21+
self._name = name
22+
23+
def __str__(self):
24+
return self._name
25+
26+
27+
class Sofa:
28+
29+
def __init__(self, name):
30+
self._name = name
31+
32+
def __str__(self):
33+
return self._name
34+
35+
36+
class Table:
37+
38+
def __init__(self, name):
39+
self._name = name
40+
41+
def __str__(self):
42+
return self._name
43+
44+
45+
class VictorianFactory(AbstractFactory):
46+
47+
def create_chair(self):
48+
return Chair("victorian chair")
49+
50+
def create_sofa(self):
51+
return Sofa("victorian sofa")
52+
53+
def create_table(self):
54+
return Table("victorian table")
55+
56+
57+
class ModernFactory(AbstractFactory):
58+
59+
def create_chair(self):
60+
return Chair("modern chair")
61+
62+
def create_sofa(self):
63+
return Sofa("modern sofa")
64+
65+
def create_table(self):
66+
return Table("modern table")
67+
68+
69+
class FuturisticFactory(AbstractFactory):
70+
71+
def create_chair(self):
72+
return Chair("futuristic chair")
73+
74+
def create_sofa(self):
75+
return Sofa("futuristic sofa")
76+
77+
def create_table(self):
78+
return Table("futuristic table")
79+
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Component:
2+
3+
def __init__(self, name):
4+
self.name = name
5+
self.parent = None
6+
7+
def move(self, new_path):
8+
new_folder = get_path(new_path)
9+
del self.parent.children[self.name]
10+
new_folder.children[self.name] = self
11+
self.parent = new_folder
12+
13+
def delete(self):
14+
del self.parent.children[self.name]
15+
16+
17+
class Folder(Component):
18+
19+
def __init__(self, name):
20+
super().__init__(name)
21+
self.children = {}
22+
23+
def add_child(self, child):
24+
self.parent = self
25+
self.children[child.name] = child
26+
27+
28+
class File(Component):
29+
30+
def __init__(self, name, contents):
31+
super().__init__(name)
32+
self.contents = contents
33+
34+
35+
root = Folder('')
36+
37+
def get_path(path):
38+
names = path.split('/')[1:]
39+
node = root
40+
for name in names:
41+
node = node.children[name]
42+
return node
43+

OOP/B.Design Patterns/03. Command.py

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import sys
2+
3+
4+
class Window:
5+
6+
def exit(self):
7+
sys.exit(0)
8+
9+
10+
class Document:
11+
12+
def __init__(self, filename):
13+
self.filename = filename
14+
self.contents = "This file cannot be modified"
15+
16+
def save(self):
17+
with open(self.filename, "w") as file:
18+
file.write(self.contents)
19+
20+
21+
class ToolbarDocument:
22+
23+
def __init__(self, name, iconname):
24+
self.name = name
25+
self.iconname = iconname
26+
27+
def click(self):
28+
self.command.execute()
29+
30+
31+
class MenuItem:
32+
33+
def __init__(self, menu_name, item_name):
34+
self.menu = menu_name
35+
self.item = item_name
36+
37+
def click(self):
38+
self.command.execute()
39+
40+
41+
class KeyboardShortcut:
42+
43+
def __init__(self, key, modifier):
44+
self.key = key
45+
self.modifier = modifier
46+
47+
def keypress(self):
48+
self.command.execute()
49+
50+
51+
class SaveCommand:
52+
53+
def __init__(self, document):
54+
self.document = document
55+
56+
def execute(self):
57+
self.document.save()
58+
59+
60+
class ExitCommand:
61+
62+
def __init__(self, window):
63+
self.window = window
64+
65+
def execute(self):
66+
self.window.exit()
67+
68+

0 commit comments

Comments
 (0)