zoukankan      html  css  js  c++  java
  • 行为模式-策略模式

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

    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!
    """

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

  • 相关阅读:
    6
    5
    4
    3
    Hive常用的DCL(Data Control Language)数据操作
    Hive常用的DQL(Data Query Language)数据操作
    Hive常用的DML(Data Manipulation Language)数据操作
    Hive常用的DDL(Data Definition Language)数据操作
    Hive常用的数据类型概述
    Hive的JDBC环境部署
  • 原文地址:https://www.cnblogs.com/wzy23/p/13657756.html
Copyright © 2011-2022 走看看