Python for Head First Design Patterns book (2020)
chapter 1(strategy)
chapter 2(observer) (Only swing has no translation.)
chapter 3(decorator) (Only io has no translation.)
chapter 4(factory)
chapter 5(singleton)
chapter 6(command) (Only swing has no translation.)
chapter 7(adapter)
chapter 7(facade)
chapter 8(templatemethod) (applet and frame have no translation.)
chapter 9(iterator)
chapter 9(composite)
chapter 10(state)
chapter 11(proxy) (Translating this chapter is beyond my ability.)
chapter 12(combining)
chapter 12(combined) (Translating this subsection is beyond my ability.)
chapter 13 (No code)
Appendix (bridge)
Appendix (builder)
Appendix (flyweight)
Appendix (prototype)
Appendix (collections)
Appendix (ducks)
Appendix (iterenum)
# our code
from abc import ABC, abstractmethod
from typing import List
class AnimalTest:
@staticmethod
def main(*args):
at: AnimalTest = AnimalTest()
at.makeSomeAnimals()
def makeSomeAnimals(self):
dog: Animal = self.Dog()
cat: Animal = self.Cat()
# treat dogs and cats as their supertype, Animal
animals: List[Animal] = []
animals.append(dog)
animals.append(cat)
for animal in animals: animal.makeSound() # can call makeSound on any Animal
// authors' code [https://github.com/bethrobson/Head-First-Design-Patterns/blob/master/src/headfirst/designpatterns/strategy/AnimalTest.java]
import java.util.ArrayList;
public class AnimalTest {
public static void main(String[] args) {
AnimalTest at = new AnimalTest();
at.makeSomeAnimals();
}
public void makeSomeAnimals() {
Animal dog = new Dog();
Animal cat = new Cat();
// treat dogs and cats as their supertype, Animal
ArrayList<Animal> animals = new ArrayList<Animal>();
animals.add(dog);
animals.add(cat);
animals.forEach(Animal::makeSound); // can call makeSound on any Animal
}