Python設計模式——策略模式(孫悟空用什麽打妖怪)
阿新 • • 發佈:2018-02-05
就是 作用 oop 事情 input 邏輯控制 except exce one #coding:utf-8
'''
策略模式作用:
就是使用多種算法來解決一個問題,最大的特性的是:能夠在運行時透明地切換算法(客戶端代碼對變化無感知)
假如有兩種算法,一種對少量的輸入效果更好,另一種對大量輸入效果更好,則可以使用策略模式在運行時基於
輸入數據決定使用哪種算法
想了想還是舉個例子吧:
比如孫悟空打妖怪,這是一個實實在在存在的問題,就是打妖怪這個事情。
那麽該如何打妖怪?也就是用什麽方法去打,用什麽招數。
遇到白骨精用金箍棒去打,遇到蜘蛛精用拳腳
也就是說遇到不同的妖怪,采取不同的打法。但都在解決一個問題,就是打妖怪
只是基於要打的對象不同而采取不同的打法
'''
#打法:金箍棒
def golden_hoops(monster):
#monster參數用於接收妖怪類型
return "golden hoops..."
#打法:拳頭
def fist(monster):
# monster參數用於接收妖怪類型
return "fist..."
#選擇戰略
def choose_strategy(monster, strategy):
#monster參數用於接收妖怪類型
#strategy參數用於接收不同的打法(也就是對應的函數名稱)
return strategy(monster)
#邏輯控制
def main():
while True:
monster = input("Enter the monster: ") #輸入一個怪物
if monster == "quit":
print("Bye!!!")
return
strategy_option = None
available_strategy = {'1':golden_hoops, '2':fist} #定義一個可用的戰略
while strategy_option not in available_strategy.keys():
strategy_option = input("Choose strategy [1] Use golden hoops, [2] Use fist : ") #戰略選擇
try:
final_strategy = available_strategy[strategy_option]
print("Play monster ({0}), using ({1}) strategy".format(monster, choose_strategy(monster, final_strategy))) #這是重點,根據根據不同的怪物使用不同的戰略
except KeyError:
print("No strategy options {}".format(available_strategy))
if __name__ == '__main__':
main()
#OK!此例子到此結束,希望朋友們能看懂。通過我這個例子去理解策略模式的思想,並運用到實際的項目中去
Python設計模式——策略模式(孫悟空用什麽打妖怪)