2023年12月10日21:54:25
完成乙個功能可能會有好幾種演算法或者方法來實現,通過對演算法和方法的抽象,提供統一介面,不通演算法,實現方式為實現類,通過注入不同的實現物件來實現演算法,實現方式的靈活切換即為策略模式。
策略模式是針對多種選擇的**片段的優化,是的**減少修改,符合開閉原則。
編碼實現就是先將各個演算法或者實現方式抽象成乙個介面,介面裡面是所有實現方式的抽象方法。
每增加一種實現方式或者演算法實現,就增加乙個類實現該介面,並實現裡面的抽象方法。
最後通過傳入不同類的物件來實現不同演算法或者實現方式的靈活切換。
優點:邏輯直觀,易於擴充套件。
缺點:每增加乙個演算法或者實現方式都要實現乙個類。類檔案會顯著增加
感覺設計模式其實就講的是一種技巧或者寫好的**的捷徑。單同時也是犧牲了一部分的,比如類的數量變大了,單卻更好的,更優雅的實現比較好的**。
策略在重構**中的考量,比如類似 if lese , switch case 這類語句,如果判斷很多,其實可以通過策略模式來重構這部分的**,不至於一大坨,又一大坨的**塊。通過多個實現類的方式,靈活在多種演算法,實現方式之間切換。
下面是個減加乘的例子:
首先抽象計算的介面:
/***抽象介面,高度抽象各個演算法和實現方式的實現 */
public
inte***ce
strategy
然後分別是實現類:
相加:
publicclass addstrategy implements
strategy
}
相減:
1public
class substrategy implements
strategy
7 }
相乘:
publicclass multiplystrategy implements
strategy
}
工廠類:
publicclass
contextrole
else
if (type.equals("-"))
else
if (type.equals("*"))
}public string calculate(float a,float
b) }
測試類:
publicclass
test
}
執行結果:
相加的結果3.0相減運算:-1.0成法運算:2.0
設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...
設計模式 策略模式
策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些方法完成的都是相同的工作,只是實現不同,他們可以用相同的方式呼叫所有的演算法,減少了演算法類和使用演算法類之間的耦合.優點 策略模式的strategy類層次為context定義了一系列可供重用的演算法和行為,繼承有助於吸取這些演算法中的公共...
設計模式 策略模式
定義了演算法家族,分別封裝起來,讓他們之間可以相互替代,此模式讓演算法的變化,不會影響到使用演算法的客戶端 定義抽象類 分別實現抽象類,不同的物件 然後用乙個類初始化,並傳入具體的策略物件 根據具體的策略物件,呼叫其演算法的方法 客戶端 是由於例項化不同的策略,所以最終在呼叫 類時,所獲得的結果時不...