1234567891011121314151617181920212223242526272829303132333435363738394041 |
- """http://stackoverflow.com/questions/963965/how-is-this-strategy-pattern-written-in-python-the-sample-in-wikipedia
- In most of other languages Strategy pattern is implemented via creating some base strategy interface/abstract class and
- subclassing it with a number of concrete strategies (as we can see at http://en.wikipedia.org/wiki/Strategy_pattern),
- however Python supports higher-order functions and allows us to have only one class and inject functions into it's
- instances, as shown in this example.
- """
- import types
- class StrategyExample:
- def __init__(self, func=None):
- self.name = 'Strategy Example 0'
- if func is not None:
- self.execute = types.MethodType(func, self)
- def execute(self):
- print(self.name)
- def execute_replacement1(self):
- print(self.name + ' from execute 1')
- def execute_replacement2(self):
- print(self.name + ' from execute 2')
- if __name__ == '__main__':
- strat0 = StrategyExample()
- strat1 = StrategyExample(execute_replacement1)
- strat1.name = 'Strategy Example 1'
- strat2 = StrategyExample(execute_replacement2)
- strat2.name = 'Strategy Example 2'
- strat0.execute()
- strat1.execute()
- strat2.execute()
|