Skip to content

Commit 5e0a136

Browse files
committed
chapter 12
1 parent bae73f6 commit 5e0a136

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+1306
-0
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
[chapter 9(iterator)](https://github.com/rebuild-123/Python-Head-First-Design-Patterns/tree/main/iterator)
1313
[chapter 9(composite)](https://github.com/rebuild-123/Python-Head-First-Design-Patterns/tree/main/composite)
1414
[chapter 10(state)](https://github.com/rebuild-123/Python-Head-First-Design-Patterns/tree/main/state)
15+
chapter 11(proxy) (Translating this chapter is beyond my ability.)
16+
[chapter 12(combining)](https://github.com/rebuild-123/Python-Head-First-Design-Patterns/tree/main/combining)
17+
chapter 12(combined) (Translating this subsection is beyond my ability.)
1518
## Introduction
1619
1. Translated from [Head-First-Design-Patterns](https://github.com/bethrobson/Head-First-Design-Patterns) (java)
1720
2. What are the differences between other Python version Head-First-Design-Patterns and ours?

combining/adapter/DecoyDuck.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from Quackable import Quackable
2+
3+
4+
class DecoyDuck(Quackable):
5+
def quack(self) -> None:
6+
print("<< Silence >>")

combining/adapter/DuckCall.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from Quackable import Quackable
2+
3+
4+
class DuckCall(Quackable):
5+
def quack(self) -> None:
6+
print("Kwak")

combining/adapter/DuckSimulator.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from __future__ import annotations
2+
3+
from DuckCall import DuckCall
4+
from Goose import Goose
5+
from GooseAdapter import GooseAdapter
6+
from MallardDuck import MallardDuck
7+
from Quackable import Quackable
8+
from RedheadDuck import RedheadDuck
9+
from RubberDuck import RubberDuck
10+
11+
12+
class DuckSimulator:
13+
@staticmethod
14+
def main(*args) -> None:
15+
simulator: DuckSimulator = DuckSimulator()
16+
simulator.simulate()
17+
18+
def simulate(self) -> None:
19+
mallardDuck: Quackable = MallardDuck()
20+
redheadDuck: Quackable = RedheadDuck()
21+
duckCall: Quackable = DuckCall()
22+
rubberDuck: Quackable = RubberDuck()
23+
gooseDuck: Quackable = GooseAdapter(Goose())
24+
25+
print("\nDuck Simulator: With Goose Adapter")
26+
27+
self.simulate_(mallardDuck)
28+
self.simulate_(redheadDuck)
29+
self.simulate_(duckCall)
30+
self.simulate_(rubberDuck)
31+
self.simulate_(gooseDuck)
32+
33+
# authors' java code has two "simulate", which cannot be translated to python.
34+
def simulate_(self, duck: Quackable) -> None:
35+
duck.quack()
36+
37+
if __name__ == "__main__":
38+
DuckSimulator.main()

combining/adapter/Goose.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Goose:
2+
def honk(self) -> None:
3+
print("Honk")

combining/adapter/GooseAdapter.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from Goose import Goose
2+
from Quackable import Quackable
3+
4+
5+
class GooseAdapter(Quackable):
6+
goose: Goose
7+
8+
def __init__(self, goose: Goose):
9+
self.goose = goose
10+
11+
def quack(self) -> None:
12+
self.goose.honk()
13+
14+
# toString
15+
def __str__(self) -> str:
16+
return "Goose pretending to be a Duck"
17+
18+
# toString for print
19+
def __repr__(self) -> str:
20+
return str(self)

combining/adapter/MallardDuck.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from Quackable import Quackable
2+
3+
4+
class MallardDuck(Quackable):
5+
def quack(self) -> None:
6+
print("Quack")

combining/adapter/Quackable.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Quackable:
2+
def quack(self) -> None:
3+
pass

combining/adapter/RedheadDuck.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from Quackable import Quackable
2+
3+
4+
class RedheadDuck(Quackable):
5+
def quack(self) -> None:
6+
print("Quack")

combining/adapter/RubberDuck.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from Quackable import Quackable
2+
3+
4+
class RubberDuck(Quackable):
5+
def quack(self) -> None:
6+
print("Squeak")

0 commit comments

Comments
 (0)