Strategy Pattern
Maze:
self.strategy
solve():
self.strategy.solve(self)
m1 = Maze(dfs_strat)
m2 = Maze(bfs_strat)
compare(m1, m2)
- provided behavior instead of inheritance
- reduce the number of boiler classes
- decouple changes in middle classes from heirarchy