行为模式-策略模式

 定义多算法,把它们封装起来,并且使它们可以相互替换。本模式使得算法可独立于使用它的客户而变化。角色有:抽象策略、具体策略和上下文。

from abc import ABCMeta, abstractmethod
from datetime import datetime

# 抽象策略模式
class Strategy(metaclass=ABCMeta):

    @abstractmethod
    def execute(self, date):
        pass


# 具体策略模式
class FastStrategy(Strategy):
    def execute(self, data):
        print("使用较快的策略处理%s" % data)


class SlowStrategy(Strategy):
    def execute(self, data):
        print("使用较慢的策略处理%s" % data)


# 上下文
class Context():
    def __init__(self, strategy, data):
        self.data = data
        self.strategy = strategy
        # 可以定义用户不知道的东西
        self.date = datetime.now()

    def set_strategy(self, strategy):
        self.strategy = strategy

    def do_strategy(self):
        self.strategy.execute(self.data)


data = "Hello!"
# 使用较快的策略处理
fast_strategy = FastStrategy()
context = Context(fast_strategy, data)
context.do_strategy()
# 使用较慢的策略处理
slow_strategy = SlowStrategy()
context = Context(slow_strategy, data)
context.do_strategy()
"""
使用较快的策略处理Hello!
使用较慢的策略处理Hello!
"""

优点:定义了一些列可重用的算法和行为;消除了一些条件语句;可以提供相同行为的不同实现;缺点:客户必须了解不同的策略。

posted @ 2020-09-12 17:28  第十一个程序员  阅读(123)  评论(0编辑  收藏  举报