zoukankan      html  css  js  c++  java
  • 【编程思想】【设计模式】【行为模式Behavioral】策略模式strategy

    Python版

    转自https://github.com/faif/python-patterns/blob/master/behavioral/strategy.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
    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.
    
    *TL;DR80
    Enables selecting an algorithm at runtime.
    """
    
    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()
    
    ### OUTPUT ###
    # Strategy Example 0
    # Strategy Example 1 from execute 1
    # Strategy Example 2 from execute 2
    Python转载版

    Python版

    大话设计模式

  • 相关阅读:
    hdu1848(sg函数打表)
    hdu1850(nim博弈)
    hdu1847(sg函数&yy)
    hdu2147(yy)
    poj2133(sg函数)
    Educational Codeforces Round 18D(完全二叉树中序遍历&lowbit)
    atcoder057D(组合数模板)
    euler证明
    04_过滤器Filter_04_Filter生命周期
    04_过滤器Filter_03_多个Filter的执行顺序
  • 原文地址:https://www.cnblogs.com/demonzk/p/9015705.html
Copyright © 2011-2022 走看看