python版本的策略模式

# -*- coding:UTF-8 -*-
import abc

class Strategy(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def algorithm_interface(self):
        pass

class ConcreteStrategyA(Strategy):
    def algorithm_interface(self):
        print(‘算法A实现‘)

class ConcreteStrategyB(Strategy):
    def algorithm_interface(self):
        print(‘算法B实现‘)

class ConcreteStrategyC(Strategy):
    def algorithm_interface(self):
        print(‘算法C实现‘)

class Context:
    def __init__(self,strategy):
        self.strategy=strategy

    def context_interface(self):
        self.strategy.algorithm_interface()

if __name__=="__main__":
    context = Context(ConcreteStrategyA())
    context.context_interface()
    context = Context(ConcreteStrategyB())
    context.context_interface()
    context = Context(ConcreteStrategyC())
    context.context_interface()

原文地址:https://www.cnblogs.com/gjinwei/p/8351135.html

时间: 2024-11-17 15:38:44

python版本的策略模式的相关文章

JavaScript版本的策略模式

俗话说,条条大路通罗马.在美剧<越狱>中,主角Michael Scofield就设计了两条越狱的道路.这两条道路都可以到达靠近监狱外墙的医务室. 同样,在现实中,很多时候也有多种途径到达同一个目的地.比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但是不在乎钱,可以选择坐飞机. 如果没有钱,可以选择坐大巴或者火车. 如果再穷一点,可以选择骑自行车. 在程序设计中,我们也常常遇到类似的情况,要实现某一个功能有多种方案可以选择.比如一个压缩文件的程序,既可以选择zi

Python设计模式(2)-策略模式

# 策略模式和简单工厂模式相比,少了使用switch case 做判断,然后去实例化相应的 # 对象,比简单工厂模式更灵活. 它们代码的区别就在于此处使用了抽象类代替工厂类 # coding=utf-8class DbManager: def __init__(self): pass def operate_db(self): pass class DbInsert(DbManager): def operate_db(self): print '插入操作' class DbDel(DbMana

python 设计模式之策略模式

策略模式的定义: 1.策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 通俗的讲,也就是将那些使用的方法风别封装成独立的类,然后将这一类使用接口统一管理起来,让需要使用这些方法的用户能够随时调用他们. 策略模式的结构 策略模式的使用场景 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为. 一个系统需要动态地在几种算法中选择一种. 策略模式的缺点 1.客户端必须知道所有的策略

python版本的备忘录模式

# -*- coding:UTF-8 -*- class Originator: def __init__(self): self.__state = None @property def state(self): return self.__state @state.setter def state(self, value): self.__state = value def create_memento(self): return Memento(self.__state) def set_

python版本的命令模式

# -*- coding:UTF-8 -*- import abc class Command(metaclass=abc.ABCMeta): def __init__(self, receiver): self._receiver = receiver @abc.abstractmethod def execute(self): pass class ConcreteCommand(Command): def execute(self): self._receiver.action() cla

JavaScript设计模式与开发实践---读书笔记(5) 策略模式

策略模式的定义是:定义一系列的算法,把它们一个个封转起来,并且使它们可以相互替换. JavaScript版本的策略模式: 奖金系统: var strategies = { "S": function(salary){ return salary*4; }, "A": function(salary){ return salary*3; }, "B": function(salary){ return salary*2; } }; var calc

理解javascript中的策略模式

策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换. 使用策略模式的优点如下: 优点:1. 策略模式利用组合,委托等技术和思想,有效的避免很多if条件语句. 2. 策略模式提供了开放-封闭原则,使代码更容易理解和扩展. 3. 策略模式中的代码可以复用. 一:使用策略模式计算奖金: 下面的demo是我在书上看到的,但是没有关系,我们只是来理解下策略模式的使用而已,我们可以使用策略模式来计算奖金问题: 比如公司的年终奖是根据员工的工资和绩效来考核的,绩效为A的人,年终奖

[设计模式] javascript 之 策略模式

定义: 封装一系列的算法,使得他们之间可以相互替换,本模式使用算法独立于使用它的客户的变化. 说明:策略模式,是一种组织算法的模式,核心不在于算法,而在于组织一系列的算法,并且如何去使用它:策略模式作用在于,行为实现的不可预见,面对这样的一种变化,我们得思考如何使用程序好维跟扩展,并使得客户很好的使用算法的方式: 策略模式 使用要注意它 "变化" 的一面,策略模式就是来解决这个 变化 问题的. 比如商场买卖的价格或促销问题,如果不使用模式,就可能只是 把“所有”的情况用 if else

聚焦javascript的策略模式

?今天看到一篇很好的文章和大家分享一下: 定义: 封装一系列的算法,使得他们之间可以相互替换,本模式使用算法独立于使用它的客户的变化. 说明:策略模式,是一种组织算法的模式,核心不在于算法,而在于组织一系列的算法,并且如何去使用它:策略模式作用在于,行为实现的不可预见,面对这样的一种变化,我们得思考如何使用程序好维跟扩展,并使得客户很好的使用算法的方式: 策略模式 使用要注意它 "变化" 的一面,策略模式就是来解决这个 变化 问题的. 比如商场买卖的价格或促销问题,如果不使用模式,就可