策略模式的擴充套件 策略列舉

2021-08-30 12:43:33 字數 845 閱讀 2547

各位,我給大家出個小學的題目:輸入3個引數,進行加減法運算,引數中兩個是int型的,剩下的乙個引數是string型的,只有「+」,「-」兩個符號可以選擇,不要考慮什麼複雜的校驗,我們做的是白箱測試,輸入的就是標準的int型別和合規的string型別,各位大俠,想想看,怎麼做,簡單得很!

有非常多的實現方式,我今天來說四種,先說第一種,寫乙個類,然後進行加減法運算,類圖也不用畫了,太簡單了,直接看**:

public enum calculator  

}, //減法運算

sub("-")

}; string value = "";

//定義成員值型別

private calculator(string _value)

//獲得列舉成員的值

public string getvalue()

//宣告乙個抽象函式

public abstract int exec(int a,int b);

}

先想一想它的名字,為什麼叫做策略列舉?列舉沒有問題,它就是乙個enum型別,那為什麼又叫做策略呢?找找看能不能找到策略的影子在裡面,是的,我們定義了乙個抽象的方法exec,然後在每個列舉成員中進行了實現,如果不實現呢?你試試看看,不實現該方法就不能編譯,現在是不是清楚了?把原有定義在抽象策略中的方法移植到列舉中,每個列舉成員就成為乙個具體策略。簡單吧,總結一下,策略列舉就是這樣乙個列舉:

當然,各位可能要反思了,我使用內建類也可以實現相同的功能,寫乙個context類,然後把抽象策略、具體策略都內建進去,不就可以解決問題了,是的,可以解決,但是擴充套件性如何?可讀性如何?**是讓人讀的,然後才是讓機器執行,別把順序搞反了!

策略模式(策略列舉)

首先定義乙個介面 package com.yecc.suanfa.strategy created by yecc on 2020 11 16 19 35 public inte ce strategy 定義三個繼承介面的類 package com.yecc.suanfa.strategy crea...

策略模式之策略列舉

在使用策略模式時,我們要建立相應的策略,然後根據不同的場景使用不同的策略,這是可以的,但畢竟那是一堆的策略類,使用起來 的可讀性 擴充套件性也就一般,這種情況下我們可以使用策略模式的公升級版 策略列舉來解決上邊的問題 列舉類 public enum strategyenum sub muti str...

演算法 列舉策略

列舉法的基本思想 列舉法的基本思想是根據提出的問題列舉所有可能狀態,並用問題給定的條件檢驗哪些是需要的,哪些是不需要的。能使命題成立,即為其解。列舉結構 迴圈 判斷語句。列舉法的條件 雖然列舉法本質上屬於搜尋策略,但是它與後面講的回溯法有所不同。因為適用列舉法求解的問題必須滿足兩個條件 可預先確定每...