-
Notifications
You must be signed in to change notification settings - Fork 0
/
strategy.py
123 lines (82 loc) · 1.93 KB
/
strategy.py
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
"""
Here we are implementing Duck Behaviour,
Duck has
Swim
Quack
disply
Duck Type:
Mallard Duck
Rubber Duck (Can't quack)
RocketDuck - which actually can fly with some support
So behaviour distributed amond some categories
"""
"""
Implementing Behaviours
"""
from abc import ABCMeta, abstractmethod
class FlyBehaviour(metaclass=ABCMeta):
@abstractmethod
def fly(self):
NotImplementedError
class SwimBehaviour(metaclass=ABCMeta):
@abstractmethod
def swim(self):
NotImplementedError
class QuackBehaviour(metaclass=ABCMeta):
@abstractmethod
def quack(self):
NotImplementedError
class Fly(FlyBehaviour):
def fly(self):
print("I am flying")
class NoFly(FlyBehaviour):
def fly(self):
pass
class Swim(SwimBehaviour):
def swim(self):
print("I am swimming")
class NoSwim(SwimBehaviour):
def swim(self):
pass
class Quack(QuackBehaviour):
def quack(self):
print("Quack")
class Squack(QuackBehaviour):
def quack(self):
print("squack")
class Duck:
def disply(self):
pass
def swim(self):
pass
def quack(self):
pass
class Duck2:
def __init__(self):
self.quack_behav: QuackBehaviour = None
def disply(self):
pass
def quack(self):
"""
Delegation of funcionality
"""
self.quack_behav.quack()
def set_quack_behavior(self, qb: QuackBehaviour):
"""
Dynamic behaviour set
"""
self.quack_behav = qb
class MallardDuck(Duck):
def disply(self):
print("I am a mallar duck")
def swim(self):
swim_behav = Swim()
swim_behav.swim()
def quack(self):
quack_behav = Quack()
quack_behav.quack()
class RubberDuck(Duck2):
def __init__(self):
self.quack_behav = Squack()
def disply(self):
print("I am a rubber duck")