python实现策略模式

策略模式如图所示:

代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-

class Strategy:
    "抽象算法类"

def algorithmInterface(self):
        "抽象方法"
        pass

class ConcreteStrategyA(Strategy):
    "具体算法类A"

def algorithmInterface(self):
        "具体实现方法"

print(‘Algorithm A‘)

class ConcreteStrategyB(Strategy):
    "具体算法类A"

def algorithmInterface(self):
        "具体实现方法"

print(‘Algorithm B‘)

class ConcreteStrategyC(Strategy):
    "具体算法类A"

def algorithmInterface(self):
        "具体实现方法"

print(‘Algorithm C‘)

class Context:
    "上下文类"

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

def contextInterface(self):
        "上下文接口"

self.strategy.algorithmInterface()

if __name__ == ‘__main__‘:
    "相同调用方法不同策略"

context = Context(ConcreteStrategyA())
    context.contextInterface()

context = Context(ConcreteStrategyB())
    context.contextInterface()

context = Context(ConcreteStrategyC())
    context.contextInterface()

学习转载于:www.pythonfan.org

时间: 2024-07-31 10:19:18

python实现策略模式的相关文章

Python设计模式——策略模式(孙悟空用什么打妖怪)

#coding:utf-8 ''' 策略模式作用:     就是使用多种算法来解决一个问题,最大的特性的是:能够在运行时透明地切换算法(客户端代码对变化无感知)     假如有两种算法,一种对少量的输入效果更好,另一种对大量输入效果更好,则可以使用策略模式在运行时基于     输入数据决定使用哪种算法 想了想还是举个例子吧:     比如孙悟空打妖怪,这是一个实实在在存在的问题,就是打妖怪这个事情.     那么该如何打妖怪?也就是用什么方法去打,用什么招数.     遇到白骨精用金箍棒去打,遇

python设计模式第九天【策略模式】

1. 定义 对一系列算法进行封装,为所有算法定义一个抽象的算法接口,可以平滑的进行算法切换 2. 策略模式的UML图 3.代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from abc import ABCMeta, abstractmethod class Context(object): def setStrategy(self, strategy): self.__strategy = strategy def operation(s

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

本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的问题? 是什么?通过Python语言来去实现这个设计模式,用于解决为什么中提到的问题. 怎么用?理解了为什么我们也就基本了解了什么情况下使用这个模式,不过在这里还是会细化使用场景,阐述模式的局限和优缺点. 这一篇我们先来看看策略模式. 为什么? 假设我们有如下一个项目: 飞机大战游戏中,玩家可以选择

【经典案例】Python详解设计模式:策略模式

完成一项任务往往有多种方式,我们将其称之为策略. 比如,超市做活动,如果你的购物积分满1000,就可以按兑换现金抵用券10元,如果购买同一商品满10件,就可以打9折,如果如果购买的金额超过500,就可以享受满减50元的优惠.这是三个不同的促销策略. 再比如,联系朋友.同学,可以打电话,也可以发短信,可以发微信,也可以发邮件,这是四个不同的联系策略. 再比如,去外出旅游,我们可以选择火车,也可以选择公共汽车,可以选择飞机,也可以选择自驾游.这又是四个不同的出行策略. 以上这些真实场景,都有策略选择

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.客户端必须知道所有的策略

PHP设计模式-策略模式

<?php//策略模式//将一组特定的算法或行为 封装成一个类,以适应上下文环境 //策略的接口文件 约定策略的行为 针对一种情况 产生具体的策略interface Policy{ function showAd();} class Female implements Policy{ public function showAd() { echo __CLASS__.' policy'; }} class Male implements Policy{ public function showA

对设计模式的总结之简单工厂与策略模式

前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓,本文就说说我对本人对简单工厂模式.策略模式的见解. 简单工厂模式与策略模式 简单工厂模式 工作中,常常遇到需要做一个功能(鸭子),这个功能中含有可控个数的子操作功能(鸭子叫,鸭子跑,鸭子飞),而且子功能在不同的情况下处理方式又不相同(成年鸭子/小鸭子叫,成年鸭子/小鸭子跑,成年鸭子/小鸭子飞).我

Java 策略模式

Java 策略模式 @author ixenos 定义 1.封装算法:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换 2.分割行为和环境:对用户屏蔽内部实现,使客户端在调用算法的时候能够互不影响地互换 策略模式的实现(面向接口编程) 方法: 1.接口多态:策略模式的用意是针对一组算法,将每个算法封装到具有共同接口的独立的类中,从而使他们之间可以相互替换 2.具体策略提供不同算法,环境负责维持和查询策略,把具体策略和环境分割开来,使得算法可以在不影响客户端和环境的情况下修改 角色分工: