|
@@ -1,40 +1,43 @@
|
|
|
-"""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.
|
|
|
+# 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'
|
|
|
+ self.name = 'Strategy Example 0'
|
|
|
if func is not None:
|
|
|
- self.execute = types.MethodType(func, self)
|
|
|
+ self.execute = types.MethodType(func, self)
|
|
|
|
|
|
- def execute(self):
|
|
|
- print(self.name)
|
|
|
+ def execute(self):
|
|
|
+ print(self.name)
|
|
|
|
|
|
|
|
|
def execute_replacement1(self):
|
|
|
- print(self.name + ' from execute 1')
|
|
|
+ print(self.name + ' from execute 1')
|
|
|
|
|
|
|
|
|
def execute_replacement2(self):
|
|
|
- print(self.name + ' from execute 2')
|
|
|
+ print(self.name + ' from execute 2')
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
- strat0 = StrategyExample()
|
|
|
+ strat0 = StrategyExample()
|
|
|
|
|
|
strat1 = StrategyExample(execute_replacement1)
|
|
|
- strat1.name = 'Strategy Example 1'
|
|
|
+ strat1.name = 'Strategy Example 1'
|
|
|
|
|
|
strat2 = StrategyExample(execute_replacement2)
|
|
|
strat2.name = 'Strategy Example 2'
|
|
|
|
|
|
strat0.execute()
|
|
|
- strat1.execute()
|
|
|
+ strat1.execute()
|
|
|
strat2.execute()
|