码迷,mamicode.com
首页 > 其他好文 > 详细

【编程思想】【设计模式】策略模式

时间:2018-05-09 19:35:58      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:number   amp   creating   src   eating   def   env   class   method   

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版

大话设计模式

【编程思想】【设计模式】策略模式

标签:number   amp   creating   src   eating   def   env   class   method   

原文地址:https://www.cnblogs.com/demonzk/p/9015705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!