Java常用模式學習之策略模式

2021-08-28 02:43:52 字數 1171 閱讀 7883

在策略模式(strategy pattern)中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。

在很久很久以前,有乙隻奇怪的龍,他可以生兒子。這個龍很強大,有兩個技能,乙個魔法攻擊,乙個是物理攻擊。但是上帝發現這隻龍因為這兩個技能的原因,強大無比,傷害無辜的吃瓜群眾,上帝很擔心這兩個技能能夠遺傳下去。

於是上帝發明了技能槽,讓龍寶寶們創造技能。但是上帝發現龍寶寶們的創造能力很差,創作過程非常麻煩。每個龍都需要重新創造技能,即使技能完全相同,也需要重新創造。

但是呢,可憐的龍寶寶不會創造技能,**的村民開始欺負龍寶寶。上帝看到可憐的龍寶寶傷心壞了,於是就創造了三個魔法技能和三個物理技能,讓龍寶寶學習,但是每種只能學習乙個。這樣龍寶寶就可以很快的學習技能了。

龍寶寶們就開始了快樂的生活。

如果上帝將技能寫死,也就是沒有了技能槽,直接賦予一種技能,但是這樣遺傳過程中不能讓不同的龍獲得不同的技能,於是上帝製造了技能槽。讓龍可以學習不同的技能,放入想應的技能槽中。在這個過程中,其實是經歷了三個過程。

技能固定 ->技能槽創造技能->學習多個創造好的技能

那麼這個公升級的過程就是策略模式的使用。

首先定義乙個類,由於父類寫死,導致子類中不同功能的方法只能主動覆蓋父類,及其不方便。於是有了第二種情況,將這個不滿足於所有子類的方法定義成介面(這個方法子類中一定會出現,但是功能不相同。正常的人都會說話,但是語言不相同),讓子類實現這個介面,這樣就會讓子類方便的更換需要修改的那個方法。

但是有一種特殊的情況,子類復現的時候,出現了大量重複的功能(雖然不同地方的語言不同,但是很多人都會同一種語言),於是將這些重複出現的情況實現,這樣子類直接引用就可以了。如果子類中存在不具有該介面的功能(極少數的情況下)那麼定義乙個預設實現類,不存在任何方法實現。

建立乙個介面。

建立實現介面的實體類。

建立父類。

建立子類。

1、如果在乙個系統裡面有許多類,它們之間的區別僅在於它們的行為,那麼使用策略模式可以動態地讓乙個物件在許多行為中選擇一種行為。

2、乙個系統需要動態地在幾種演算法中選擇一種。

3、如果乙個物件有很多的行為,如果不用恰當的模式,這些行為就只好使用多重的條件選擇語句來實現。

java設計模式學習之策略模式

1.介紹 在策略模式 strategy pattern 中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。比如我們在計算兩個數字的時候,會有數字相加,數字相減,數字相乘,數字相除幾種方法,一般做法,我們會用乙個 if else 來判斷,但是這樣有乙個不好的地方就是 複雜化...

java 設計模式之策略模式

策略模式非常簡單,也不再舉例子了,它其實就是根據clinet選擇的不同,執行不同的 避免了if.else 和switch case 的不方便和耦合。甚至說你可能平常經常用,只是不知道這是策略模式。類圖 對於擁有公共介面的first,second,third,給clinet提供乙個類context 去...

java設計模式之策略模式

很久沒有更新過設計模式的學習了,最近在看的幾種設計模式在專案實際開發過程中不常用,所以並沒有彙總成部落格寫出來 這一次介紹的是策略模式。策略模式和工廠模式的思想有點類似,都是把物件或資料的獲取封裝起來,需要使用的時候傳入相應的引數獲取相關的物件或資料。工廠模式是對建立物件進行封裝,乙個對操作行為進行...