类方式实现策略模式
根据不同情况动态选择不同的实例方法
# 策略模式 多种算法解决问题,根据情况,运行时透明切换算法
import types
# types.MethodType(func,obj)
# 将函数动态绑定为对象的方法
class Test:
def __init__(self, func=None):
self.name = 'Example zero'
if func:
self.execute = types.MethodType(func, self)
def execute(self):
print(self.name)
def execute_one(self):
print('execute_one: ' + self.name)
def execute_two(self):
print('execute_two: ' + self.name)
if __name__ == '__main__':
t1 = Test(execute_one)
t1.name = 'Example one'
t1.execute()
t2 = Test(execute_two)
t2.name = 'Example two'
t2.execute()
命名元祖实现策略模式
attrgetter有利于函数式编程代码可读性
import pprint
from collections import namedtuple
from operator import attrgetter
if __name__ == '__main__':
ProgrammingLang = namedtuple('ProgrammingLang', 'name,ranking')
stats = (('Ruby', 14), ('Javascript', 8), ('Python', 7), ('Scala', 31), ('Swift', 18), ('Lisp', 23))
lang_stats=[ProgrammingLang(n,r) for n,r in stats]
pp=pprint.PrettyPrinter(indent=5)
pp.pprint(sorted(lang_stats,key=attrgetter('name')))
pp.pprint(sorted(lang_stats,key=attrgetter('ranking')))
网友评论