Skip to content

Commit 97f63ef

Browse files
committed
template readme
1 parent e5d52f6 commit 97f63ef

File tree

4 files changed

+126
-0
lines changed

4 files changed

+126
-0
lines changed

chapter07_adapter_facade/duck.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
class FlyBehavior:
2+
def fly(self):
3+
raise NotImplementedError
4+
5+
6+
class FlyWithWings(FlyBehavior):
7+
def fly(self):
8+
print("I'm flying!!")
9+
10+
11+
class FlyNoWay(FlyBehavior):
12+
def fly(self):
13+
print("I can't fly")
14+
15+
16+
class FlyRocketPowered(FlyBehavior):
17+
def fly(self):
18+
print("I'm flying with a rocket!'")
19+
20+
21+
class QuackBehavior:
22+
def quack(self):
23+
raise NotImplementedError
24+
25+
26+
class Quack(QuackBehavior):
27+
def quack(self):
28+
print("Quack")
29+
30+
31+
class MuteQuack(QuackBehavior):
32+
def quack(self):
33+
print("<< Silence >>")
34+
35+
36+
class Squeak(QuackBehavior):
37+
def quack(self):
38+
print("Squeak")
39+
40+
41+
class Duck:
42+
fly_behavior = None
43+
quack_behavior = None
44+
45+
def set_fly_behavior(self, fly_behavior):
46+
self.fly_behavior = fly_behavior
47+
48+
def set_quack_behavior(self, quack_behavior):
49+
self.quack_behavior = quack_behavior
50+
51+
def display():
52+
raise NotImplementedError
53+
54+
def perform_fly(self):
55+
self.fly_behavior.fly()
56+
57+
def perform_quack(self):
58+
self.quack_behavior.quack()
59+
60+
def swim():
61+
print("All ducks float, even decoys!")
62+
63+
64+
class MallardDuck(Duck):
65+
fly_behavior = FlyWithWings()
66+
quack_behavior = Quack()
67+
68+
def display(self):
69+
print("I'm a real Mallard duck")
70+
71+
72+
class ModelDuck(Duck):
73+
fly_behavior = FlyNoWay()
74+
quack_behavior = Squeak()
75+
76+
def display(self):
77+
print("I'm a real Mallard duck")
78+
79+
80+
def mini_duck_simulator():
81+
mallard = MallardDuck()
82+
mallard.perform_quack()
83+
mallard.perform_fly()
84+
85+
model = ModelDuck()
86+
model.perform_fly()
87+
model.set_fly_behavior(FlyRocketPowered())
88+
model.perform_fly()
89+
90+
91+
if __name__ == "__main__":
92+
mini_duck_simulator()
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from random import randint
2+
from duck import MallardDuck
3+
4+
class DuckAdapter():
5+
def __init__(self, duck) -> None:
6+
self.duck = duck
7+
self.rand = randint
8+
9+
def gobble(self):
10+
self.duck.perform_quack()
11+
12+
def fly(self):
13+
if self.rand(0,4) == 0:
14+
self.duck.perform_fly()
15+
16+
def turkey_test_drive():
17+
duck = MallardDuck()
18+
tuckey = DuckAdapter(duck)
19+
for _ in range(10):
20+
print("The DuckAdapter says...")
21+
tuckey.gobble()
22+
tuckey.fly()
23+
24+
25+
if __name__ == '__main__':
26+
turkey_test_drive()

chapter07_adapter_facade/readme.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Chapter 7: Adapter and Façade design patterns
2+
3+
> **Adapter**: Converts the interface of a class into another interface the clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
4+
5+
> **Façade**: Provides a unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.

chapter08_template/readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Chapter 8: Template design pattern
2+
3+
> **Template Method**: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.

0 commit comments

Comments
 (0)