設計模式之策略模式

2021-07-31 23:36:52 字數 2134 閱讀 2227

設計模式之策略模式

策略模式(straregy pattern)是一種比較簡單的模式,也叫政策模式(policy pattern),定義如下:define a family of algorithms, encapsulate each one, and make them interchangeable.(定義一組演算法,將每個演算法都封裝起來,並且使它們之間可以相互裝換)

策略模式通用類圖

三個角色

context封裝角色:也叫上下文角色,起承上啟下作用,遮蔽高層模組對策略、演算法的直接訪問,封裝可能存在的變化;

strategy抽象策略角色:策略、演算法家族的抽象,通常為介面,定義每個策略或演算法必須具有的方法和屬性;

cincretestrategy具體策略角色:實現抽象策略中的操作,該類含有具體的演算法。

通用原始碼

抽象策略角色

public inte***ce strategy
具體策略角色

public class concretestrategy1 implements strategy

}

public class concretestrategy2 implements strategy

}

封裝角色

public class context 

public void doanything()

}

客戶端

策略模式優點

1.演算法可以自由切換,這是策略模式本身定義的,只要實現抽象策略,它就成為策略略家族的乙個成員,通過封裝角色對其進行封裝,保證對外提供「可自由切換」的策略;

2.避免使用多重條件判斷,如果沒有策略模式,要在多個策略演算法之間切換,會使用多重條件語句,多重條件語句不易維護,而且出錯概率大。使用策略模式後,可以由其它模組決定採用何種策略,策略家族對外提供的訪問介面就是封裝類,簡化了操作,避免了條件語句判斷;

3.擴充套件性良好,系統中增加乙個策略很容易。

策略模式缺點

1.策略數量增多,每個策略都是乙個類,復用的可能性很小,類數量增多;

2.所有的策略類都需要對外暴露,上層模組必須知道有哪些策略,然後才能決定使用那一策略,違背迪公尺特法則,可以使用其它模式來修復,如工廠方法模式,**模式或享原模式。

策略模式使用場景

1.多各類只有在演算法或行為上稍有不同的場景;

2.演算法需要自動切換的場景;

3.需要遮蔽演算法規則的場景。

策略模式的注意事項

如果乙個系統中策略家族的具體策略數量超過4個,則需要考慮混合模式,解決策略膨脹和對外暴露問題,否則日後的系統維護會非常麻煩。

例子:孫劉聯姻

妙計介面

public inte***ce istrategy
妙計

public class backdoor implements istrategy

}

public class givengreenlight implements istrategy

}

public class blockenemy implements istrategy

}

錦囊

public class context 

public void operate()

}

趙雲

設計模式之策略模式

include using namespace std 飛行行為介面類 class flystrategy 高空飛行行為具現類 class heightfly public flystrategy virtual void fly private heightfly 低空飛行行為具現類 class ...

設計模式之 策略模式

策略模式 strategy pattern 定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。策略模式是一種定義了一系列演算法的方法,從概念上來看,所以得這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各...

設計模式之策略模式

何為策略,就是可以實現目標的方案集合。而完成一項任務有不同的方式,每一種方式稱為乙個策略。策略模式就是定義一系列演算法,將每乙個演算法封裝起來,並讓他們可以相互替換。很簡單的乙個例子 年底移動公司推出很多的活動,比如說 存話費贈食用油,交話費贈話費,買手機贈話費 等等。推出這些個活動目的就只有乙個,...