- 定義一系列的算法投队,把它們封裝起來寝志,并且使它們可相互替換;
- 在有多種算法相似的情況下缸剪,使用if...else復(fù)雜且難以維護(hù)吗铐;當(dāng)一個(gè)系統(tǒng)有許多許多類,而區(qū)分它們的只是他們直接的行為時(shí)可以使用策略模式杏节。
- 策略模式中唬渗,算法可以自由切換,能避免使用多重條件判斷奋渔,擴(kuò)展性良好镊逝;
- 同時(shí)存在問題:策略類會(huì)增多,且需要對(duì)外暴露嫉鲸。
class TravelStrategy(object): # 出行策略
def travelAlgorithm(self):
pass
class AirplaneStrategy(TravelStrategy):
def travelAlgorithm(self):
print("坐飛機(jī)出行....")
class TrainStrategy(TravelStrategy):
def travelAlgorithm(self):
print("坐高鐵出行....")
class CarStrategy(TravelStrategy):
def travelAlgorithm(self):
print("自駕出行....")
class BicycleStrategy(TravelStrategy):
def travelAlgorithm(self):
print("騎車出行....")
class TravelInterface(object):
def __init__(self, travel_strategy):
self.travel_strategy = travel_strategy
def set_strategy(self, travel_strategy):
self.travel_strategy = travel_strategy
def travel(self):
return self.travel_strategy.travelAlgorithm()
travel = TravelInterface(AirplaneStrategy()) # 坐飛機(jī)
travel.travel()
travel.set_strategy(TrainStrategy()) # 改開車
travel.travel()