美文网首页
策略模式

策略模式

作者: 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