日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python策略模式的应用_Head First 设计模式——策略模式(Strategy Pattern)——Python实现 | 学步园...

發(fā)布時間:2025/3/20 python 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python策略模式的应用_Head First 设计模式——策略模式(Strategy Pattern)——Python实现 | 学步园... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:liuyuan_jq

2011-06-13

策略模式定義

定義了

問題

J o e 上班的公司做了一套相當成功的模擬鴨子游戲: SimUDuck。游戲中會出現(xiàn)各種鴨子,一邊游泳戲水,一邊呱

呱叫。此系統(tǒng)的內(nèi)部設計使用了標準的OO技術,設計了一個鴨 子超類(Superclass),并讓各種鴨子繼承此超類。

設計原則

找出應用中可能需要變化之處,把它 們獨立出來,不要和那些不需要變化 的代碼混在一起。

針對接口編程,而不是針對實現(xiàn)編程

多用組合,少用繼承

設計鴨子的行為

我們知道Duck類內(nèi)的fly()和quack()會隨著鴨子的不同而改變。為了要把這兩個行為從Duck類中分開,我們將把它們從Duck類 中取出來,建立一組新類來代表每個行為。這樣,鴨子類就不再需要知道行為的實現(xiàn)細節(jié)。

class Duck(object):

"""

Duck接口類

"""

def __init__(self):

super(Duck, self).__init__()

def setFlyBehavior(self, flyBehavior):

self.flyBehavior = flyBehavior;

def setQuackBehavior(self, quackBehavior):

self.quackBehavior = quackBehavior

def display(self):

raise NotImplementedError("abstract duck")

def performFly(self):

self.flyBehavior.fly();

def performQuack(self):

self.quackBehavior.quack();

def swim(self):

print("All ducks float, even decoys!")

設計鴨子的飛行行為

class FlyBehavior(object):

"""

飛行行為接口類

"""

def fly(self):

raise NotImplementedError("abstract FlyBehavior")

設計鴨子的叫行為

class QuackBehavior(object):

def quack(self):

raise NotImplementedError("abstract QuackBehavior")

實現(xiàn)源碼

flyBehavior.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

class FlyBehavior(object):

"""

飛行行為接口類

"""

def fly(self):

raise NotImplementedError("abstract FlyBehavior")

class FlyWithWings(FlyBehavior):

def fly(self):

print("I'm flying!!");

class FlyNoWay(FlyBehavior):

def fly(self):

print("I can't fly");

class FlyRocketPowered(FlyBehavior):

def fly(self):

print("I'm flying with a rocket");

quackBehavior.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

class QuackBehavior(object):

def quack(self):

raise NotImplementedError("abstract QuackBehavior")

class Quack(QuackBehavior):

def quack(self):

print("Quack");

class FakeQuack(QuackBehavior):

def quack(self):

print("Qwak");

class MuteQuack(QuackBehavior):

def quack(self):

print("<< Silence >>")

class Squeak(QuackBehavior):

def quack(self):

print("Squeak");

duck.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

from flyBehavior import *

from quackBehavior import *

class Duck(object):

"""

Duck接口類

"""

def __init__(self):

super(Duck, self).__init__()

def setFlyBehavior(self, flyBehavior):

self.flyBehavior = flyBehavior;

def setQuackBehavior(self, quackBehavior):

self.quackBehavior = quackBehavior

def display(self):

raise NotImplementedError("abstract duck")

def performFly(self):

self.flyBehavior.fly();

def performQuack(self):

self.quackBehavior.quack();

def swim(self):

print("All ducks float, even decoys!")

class DecoyDuck(Duck):

"""

誘餌鴨

"""

def __init__(self):

super(DecoyDuck, self).__init__()

self.setFlyBehavior(FlyNoWay())

self.setQuackBehavior(MuteQuack())

def display(self):

print("I'm a duck Decoy")

class MallardDuck(Duck):

"""

綠頭鴨

"""

def __init__(self):

super(MallardDuck, self).__init__()

self.setFlyBehavior(FlyWithWings())

self.setQuackBehavior(Quack())

def display(self):

print("I'm a real Mallard duck")

class RedHeadDuck(Duck):

"""

紅頭鴨

"""

def __init__(self):

self.setFlyBehavior(FlyWithWings())

self.setQuackBehavior(Quack())

def display(self):

print("I'm a real Red Headed duck")

class ModelDuck(Duck):

"""

模型鴨

"""

def __init__(self):

self.setFlyBehavior(FlyNoWay())

self.setQuackBehavior(Quack())

def display(self):

print("I'm a model duck")

class RubberDuck(Duck):

"""

橡皮鴨

"""

def __init__(self):

self.setFlyBehavior(FlyNoWay())

self.setQuackBehavior(Squeak())

def display(self):

print("I'm a rubber duckie")

if __name__ == "__main__":

mallard = MallardDuck()

rubberDuckie = RubberDuck()

decoy = DecoyDuck()

model = ModelDuck()

# 鴨子quack

mallard.performQuack()

rubberDuckie.performQuack()

decoy.performQuack()

# 動態(tài)改變鴨子的fly行為

model.performFly()

model.setFlyBehavior(FlyRocketPowered())

model.performFly()

# 綠頭鴨的 quack and fly

mallard = MallardDuck()

mallard.performQuack()

mallard.performFly()

執(zhí)行結果

Quack

Squeak

<< Silence >>

I can't fly

I'm flying with a rocket

Quack

I'm flying!!

總結

以上是生活随笔為你收集整理的python策略模式的应用_Head First 设计模式——策略模式(Strategy Pattern)——Python实现 | 学步园...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久热最新 | 最新av在线网站 | 成人一区二区三区四区 | 国产xxxxx在线观看 | 中文字字幕在线观看 | 欧美区国产区 | 国产女人18毛片水18精 | 窝窝视频在线 | 日本理论中文字幕 | 国产女同在线观看 | 臭脚猛1s民工调教奴粗口视频 | 麻豆精品视频 | 国产又黄又猛又粗又爽 | 18欧美性xxxx极品hd | 亚洲成人日韩在线 | 成人毛片大全 | 色呦呦视频在线 | 六月丁香激情网 | 亚洲色偷偷色噜噜狠狠99网 | 免费看女生裸体视频 | 波多野吉衣一二三区乱码 | 午夜一级影院 | 奇米影视亚洲 | a级国产毛片 | 久久久久亚洲av无码麻豆 | 色乱码一区二区三在线看 | 久久社区视频 | 久久青青操 | aa黄色片| 97超碰福利 | 中文字幕 日韩有码 | 亚洲欧美日韩精品在线观看 | 国产精品视频不卡 | 中文字幕看片 | 国产真实乱人偷精品视频 | 中文字幕日韩三级片 | 中文资源在线观看 | 人人操在线播放 | 伊人自拍 | 91情侣在线 | 放荡闺蜜高h苏桃情事h | 国产成年无码久久久久毛片 | 日韩精品极品视频在线观看免费 | 久久久久久久久久久久 | 色偷偷免费费视频在线 | 一本一道波多野结衣一区二区 | 蜜臀av一区 | 99久久99 | 亚洲精品日韩欧美 | 少妇色欲网 | 综合久久综合 | 久久久久久久网站 | 久久亚洲AV成人无码国产人妖 | 国产不卡视频在线观看 | 奇米99| 91九色蝌蚪porny | 五月天久久久久久 | 国产精品成人一区二区三区 | 亚洲激情视频一区 | 91深夜视频 | 国产一级久久久久毛片精品 | 国产馆在线观看 | 久久国产精品-国产精品 | 午夜国产福利 | 伊人日韩 | 一区福利| 黄色录像大片 | 久久久久久国产精品一区 | 久久精品国产亚洲av麻豆色欲 | 久久婷婷五月国产色综合激情 | 一卡二卡在线观看 | 色欲国产精品一区二区 | 午夜激情成人 | 性色AV无码久久一区二区三 | 中文字幕亚洲专区 | 国产成人精品亚洲线观看 | 男人天堂a在线 | 男女免费毛片 | 精品国产免费人成在线观看 | av女人的天堂 | 日本午夜精华 | 无码人妻精品一区二区三区蜜桃91 | 久草综合在线 | 国产成人精品av在线观 | 大片av| 亚洲成人久久精品 | 欧美大尺度床戏做爰 | 亚洲国产一区二区在线观看 | 日韩每日更新 | 波多野结衣之潜藏淫欲 | 日本成人在线视频网站 | 欧美第二区| 欧美福利视频在线观看 | 妖精视频污 | 中文字幕国产一区二区 | 在线观看网站av | 内射中出日韩无国产剧情 | 国产精品久久久久久久免费观看 | 日本美女黄视频 |