策略模式:他定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化不會影響使用演算法的客戶。
父類strategy定義所有演算法的公共介面,比如說不管打折、原價、或者滿減模式,都會得到乙個**的介面getresult()
偽**示例:
// 抽象演算法父類
abstract class father
// 演算法1
class son1 extends father
}// 演算法2
class son2 extends father
}// 演算法3
class son3 extends father
}// 使用乙個上下文contex類來維護對父類物件的引用
class context
// 上下文介面
public void contextinte***ce()
}// 實現
public static void main(string args)
// 所以,策略模式就是通過contextinte***ce函式使得具體演算法和客戶進行了隔離。但是這裡依然有所不足,客戶接觸了太多的演算法類,比如son1,son2,son3等,要克服這個問題就需要使用策略與簡單工廠結合的方法。
策略與簡單工廠結合:
// 修改引用類context
class context
}public void fun()
}// 直接將演算法類包含進context中,客戶端不再接觸具體演算法類,只需要處理context即可。
總結:
策略模式是定義一系列演算法的方法,從概念上來看,所有的演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有演算法,減少了各種演算法類與使用演算法類之間的耦合。
優點:1. 策略模式的父類層次為引用類context定義了一系列可重用的演算法或行為,繼承有助於析取出這些演算法中公共功能。比如商品販賣各種形式的getresult()介面。
2. 簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。
3. 策略模式就是用來封裝演算法的,但是在實踐中,可以用他來封裝幾乎任何型別的規則,只要在分析過程中聽到需要在不同的時間應用不同的業務規則,就可以考慮用策略模式處理這種變化的可能性。
4. 在以上的策略模式和簡單工廠模式結合中,將客戶端的判斷壓力給了context,在context中使用了switch,簡化了客戶端的職責。
設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...
設計模式 策略模式
策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些方法完成的都是相同的工作,只是實現不同,他們可以用相同的方式呼叫所有的演算法,減少了演算法類和使用演算法類之間的耦合.優點 策略模式的strategy類層次為context定義了一系列可供重用的演算法和行為,繼承有助於吸取這些演算法中的公共...
設計模式 策略模式
定義了演算法家族,分別封裝起來,讓他們之間可以相互替代,此模式讓演算法的變化,不會影響到使用演算法的客戶端 定義抽象類 分別實現抽象類,不同的物件 然後用乙個類初始化,並傳入具體的策略物件 根據具體的策略物件,呼叫其演算法的方法 客戶端 是由於例項化不同的策略,所以最終在呼叫 類時,所獲得的結果時不...