原則:將經常改變的和不經常改變的分離設計 ,面向介面而非面向實現程式設計,多組合,少繼承
舉個例子 現在有電影院,一年四季根據季節去打折,假設有乙個movie類,那麼正常設計裡面會有乙個打折方法,方法內部實現是根據季節不同去返回不同的折後**,如果需求改變,則該方法需要重新編寫**,然後測試前面的**是否會受到影響。
策略模式 ,依然是有繼承的,只不過是將行為 單獨拿出來,以面向介面的形式,根據不同的行為分別去實現
這裡,行為介面是:策略標識,而行為介面的具體實現類是:具體策略
再配合組合的形式,就可以動態的對不同子類的不同行為進行賦值
*************************====華麗分割******************************====
抽象類
public abstract class movie子類1public void setprice(double price)
private rebate rebate;//這裡是用了組合的形式 將行為介面作為屬性,並提供set方法在執行時動態傳入
public void setrebate(rebate rebate)
public void rebateing(double price )
}
public class springmovie extends movie子類2
public class summermovie extends movie子類3
public class autumnmovie extends movie折扣行為介面
public inte***ce rebate介面實現1
public class springrebate implements rebate介面實現2}
public class summberrebate implements rebate介面實現3}
public class autumnrebate implements rebate測試類}
public class test輸出內容}
春天到了
春季打折後:50.0
夏天到了
夏季打折後:20.0
秋天到了
秋季打折後:80.0
無論是哪乙個季節折扣行為發生變更,都很方便去維護和拓展
要知道,後期需求經常會變更,用於維護和拓展的時間遠遠超過了開發的時間 ,所以,這種方式無異於給自己帶來方便
策略模式 也可以簡單概括為一組行為組,或者一組演算法組,不同行為的實現即為不同的演算法實現。
符合開閉原則,隱藏了演算法的實現。
設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...
設計模式 策略模式
策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些方法完成的都是相同的工作,只是實現不同,他們可以用相同的方式呼叫所有的演算法,減少了演算法類和使用演算法類之間的耦合.優點 策略模式的strategy類層次為context定義了一系列可供重用的演算法和行為,繼承有助於吸取這些演算法中的公共...
設計模式 策略模式
定義了演算法家族,分別封裝起來,讓他們之間可以相互替代,此模式讓演算法的變化,不會影響到使用演算法的客戶端 定義抽象類 分別實現抽象類,不同的物件 然後用乙個類初始化,並傳入具體的策略物件 根據具體的策略物件,呼叫其演算法的方法 客戶端 是由於例項化不同的策略,所以最終在呼叫 類時,所獲得的結果時不...