美文网首页
策略模式

策略模式

作者: sunshining小迪儿 | 来源:发表于2018-12-20 23:15 被阅读0次

类方式实现策略模式

根据不同情况动态选择不同的实例方法

# 策略模式 多种算法解决问题,根据情况,运行时透明切换算法

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')))

相关文章

网友评论

      本文标题:策略模式

      本文链接:https://www.haomeiwen.com/subject/mxzukqtx.html