美文网首页
Python中的策略模式

Python中的策略模式

作者: Raymond_行者 | 来源:发表于2017-10-10 16:41 被阅读0次

策略模式学习与记录

  • 设计原则
    • 找出应用中可能需要改变之处, 把他们独立出来, 不要和那些不需要改变的代码混在一起
    • 针对接口编程而不是针对实现编程

不要被类的实现拖垮你的代码, 针对接口编程的关键, 在于利用多态 执行时会根据状况执行到真正的行为

代码实现如下


import abc


class FlyBehavior:
    """ pass """
    __metaclass__ = abc.ABCMeta

    @classmethod
    @abc.abstractmethod
    def fly(cls):
        """ pass """


class FlyWithWings(FlyBehavior):
    """ pass """
    @classmethod
    def fly(cls):
        """ pass """
        print('I can fly')


class FlyNoWay(FlyBehavior):
    """ pass """
    @classmethod
    def fly(cls):
        """ pass """


class QuackBehavior:
    """ pass """
    __metaclass__ = abc.ABCMeta

    @classmethod
    @abc.abstractmethod
    def quack(cls):
        """ pass """


class Quack(QuackBehavior):
    """ pass """
    @classmethod
    def quack(cls):
        """ pass """
        print('I can quack ... gua gua gua !')


class Squeak(QuackBehavior):
    """ pass """
    @classmethod
    def quack(cls):
        """ pass """
        print('I can quack ... zhi zhi zhi !')


class QuackNotWay(QuackBehavior):
    """ pass """
    @classmethod
    def quack(cls):
        """ pass """


class Duck:
    """ pass """
    def __init__(self, _fly, _quack):
        """ pass """
        self.__quack = _quack()
        self.__fly = _fly()

    def swim(self):
        """ pass """
        print('swiming ...!')

    def display(self):
        """ pass """
        self.__quack.quack()
        self.__fly.fly()
        self.swim()


class MallardDuck(Duck):
    """ pass """
    def __init__(self, _fly, _quack):
        """ pass """
        print('MallardDuck')
        super(MallardDuck, self).__init__(_fly, _quack)


class RubberDuck(Duck):
    """ 橡皮鸭 """
    def __init__(self, _fly, _quack):
        """ pass """
        print('RubberDuck')
        super(RubberDuck, self).__init__(_fly, _quack)


class DecoyDuck(Duck):
    """ 诱饵鸭 """
    def __init__(self, _fly, _quack):
        """ pass """
        print('DecoyDuck')
        super(DecoyDuck, self).__init__(_fly, _quack)

if __name__ == '__main__':
    mallar = MallardDuck(FlyWithWings, Quack)
    mallar.display()
    rubber = RubberDuck(FlyNoWay, Squeak)
    rubber.display()
    decoy = DecoyDuck(FlyNoWay, QuackNotWay)
    decoy.display()

相关文章

  • Python中的策略模式

    策略模式学习与记录 设计原则找出应用中可能需要改变之处, 把他们独立出来, 不要和那些不需要改变的代码混在一起针对...

  • 11.7设计模式-策略模式-详解

    设计模式-策略模式 策略模式详解 策略模式在android中的实际运用 1.策略模式详解 2.策略模式在andro...

  • 设计模式之--策略模式及其在JDK中的应用

    前言:本文主要介绍设计模式中的策略模式,准备按照以下几个方面展开: 什么是策略模式 策略模式结构和UML图 策略模...

  • Python策略模式

    策略模式,同一问题有多种不同的解法,即不同策略,一个物体可以动态地对策略进行更换。

  • Python策略模式

    [python|高级篇|笔记|设计模式|策略模式] 引子 接着开始吧,还是读了HF之后的学习记录。继承并不是适当的...

  • 使用lambda表达式重构面向对象的设计模式(一)

    策略模式重构 策略模式中的策略在编程中其实就是算法,使用Sttrategy模式可以整体地替换算法的实现部分。能够整...

  • Python设计模式之策略模式

    Python 中的设计模式详解之:策略模式 虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用...

  • 设计模式之策略模式

    策略模式 定义:在策略模式中,我们创建 各种策略对象,和一个行为随着 策略对象的改变而改变context对象。策略...

  • 设计模式之策略模式

    设计模式之策略模式 一 策略模式定义 策略模式在百度百科中的解释是: 策略模式是指对一系列的算法定义,并将每一个算...

  • Java设计模式——策略模式

    Java设计模式之策略模式 这期分享的模式是策略模式是程序设计中最常用的了,因为开发工作中总是会使用到策略模式。 ...

网友评论

      本文标题:Python中的策略模式

      本文链接:https://www.haomeiwen.com/subject/tlfbyxtx.html