Skip to content

Commit 052d08a

Browse files
authored
Added Design Patterns and updated readme.md links (#61)
2 parents 71ca829 + 5026733 commit 052d08a

File tree

6 files changed

+201
-3
lines changed

6 files changed

+201
-3
lines changed

OOP/B.Design Patterns/# TODO.txt

Whitespace-only changes.
Lines changed: 79 additions & 0 deletions
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+
Lines changed: 43 additions & 0 deletions
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+
Lines changed: 68 additions & 0 deletions
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+

OOP/README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,12 @@
4949
| -------------- |
5050
| <a href="A.Testing/Testing - Lab">Testing</a> |
5151
| <a href="A.Testing/Testing - Exercise">Exercise: Testing</a> |
52-
52+
| ---------------- |
53+
| ---------------- |
54+
| <a href="B.Design Patterns">Design Patterns</a> |
55+
| ---------------- |
56+
| ---------------- |
57+
| <a href="C.Exam Preparation">Exam Preparation</a> |
58+
| ------------------------- |
59+
| <a href="C.Exam Preparation/Python OOP Exam - 10 December 2022">Python OOP Exam - 10 December 2022</a>
60+
| <a href="C.Exam Preparation/Python OOP Retake Exam - 19 December 2022">Python OOP Retake Exam - 19 December 2022</a>

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Course Exercise Lecturer - **[Diyan Kalaydzhiev](https://github.com/DiyanKalaydz
2323
| <a href="Advanced/Exam Preparation">Exam Preparation</a> | <a href="OOP/8.Iterators and Generators">Iterators and Generators</a> |
2424
| <a href="Advanced/Regular Exam">Regular Exam</a> | <a href="OOP/9.Decorators">Decorators</a> |
2525
| | <a href="OOP/A.Testing">Testing</a> |
26-
| | Design Patterns |
27-
| | Exam Preparation |
26+
| | <a href="OOP/B.Design Patterns">Design Patterns</a> |
27+
| | <a href="OOP/C.Exam Preparation">Exam Preparation</a> |
2828
| | Workshop |
2929
| | Regular Exam |

0 commit comments

Comments
 (0)