- Notifications
You must be signed in to change notification settings - Fork47
Example code from Head First Design Patterns translated to python
License
dancergraham/HeadFirstDesignPatterns_python
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Example code fromHead First Design Patterns second edition translated to python to help me understand and memorise the patterns.
I have added examples of pattern usage in the Python standard library and pypi - I am starting to see patterns everywhere!
NoteI am aiming for a mostly literal translation whilst trying to make the code a little more pythonic by, e.g. using python conventions for
ClassNamesandmethod_namesand putting all of the code in a single file where it makes sense to do so.
- Strategy
- Observer
- Decorator
- Factory Method
- Simple Factory
- Abstract Factory
- Builder(Bonus Pattern)
- Singleton
- Command
- Adapter
- Façade
- Template Method
- Iterator
- Composite
- State
- Proxy
- Model View Controller (MVC)
- Manager(Bonus Pattern)
- Result(Bonus Pattern)
From the book 📖:
packageheadfirst.designpatterns.strategy;publicabstractclassDuck {FlyBehaviorflyBehavior;QuackBehaviorquackBehavior;publicDuck() { }publicvoidsetFlyBehavior(FlyBehaviorfb) {flyBehavior =fb; }publicvoidsetQuackBehavior(QuackBehaviorqb) {quackBehavior =qb; }abstractvoiddisplay();publicvoidperformFly() {flyBehavior.fly(); }publicvoidperformQuack() {quackBehavior.quack(); }publicvoidswim() {System.out.println("All ducks float, even decoys!"); }}
From this repository :
classDuck():_fly_behavior=None_quack_behavior=Nonedefset_fly_behavior(self,fly_behavior):self._fly_behavior=fly_behaviordefset_quack_behavior(self,quack_behavior):self._quack_behavior=quack_behaviordefdisplay(self):raiseNotImplementedErrordefperform_fly(self):self._fly_behavior.fly()defperform_quack(self):self._quack_behavior.quack()defswim(self):print("All ducks float, even decoys! 〰🦆〰")
- Encapsulate what varies
- Open-Closed Principle: Open for extension, closed for modification
- Program to an interface, not to an implementation
- Favour composition over inheritence
- Dependency Inversion Principle
- Depend upon abstractions
- The Hollywood Principle :"Don't call us, we'll call you"
- One Class, One Responsibility Principle
- Single Responsibility Principle
- Principle of Least Knowledge
I started to work on the MVC pattern here but have asmall complete MVC implementation in JavaScript in another repo.
About
Example code from Head First Design Patterns translated to python
Topics
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.