《一天聊一个设计模式》 策略
生活随笔
收集整理的這篇文章主要介紹了
《一天聊一个设计模式》 策略
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
9. 策略(Strategy)
Intent
定義一系列算法,封裝每個算法,并使它們可以互換。
策略模式可以讓算法獨立于使用它的客戶端。
Class Diagram
- Strategy 接口定義了一個算法族,它們都實現了 behavior() 方法。
- Context 是使用到該算法族的類,其中的 doSomething() 方法會調用 behavior(),setStrategy(Strategy) 方法可以動態地改變 strategy 對象,也就是說能動態地改變 Context 所使用的算法。
與狀態模式的比較
狀態模式的類圖和策略模式類似,并且都是能夠動態改變對象的行為。但是狀態模式是通過狀態轉移來改變 Context 所組合的 State 對象,而策略模式是通過 Context 本身的決策來改變組合的 Strategy 對象。所謂的狀態轉移,是指 Context 在運行過程中由于一些條件發生改變而使得 State 對象發生改變,注意必須要是在運行過程中。
狀態模式主要是用來解決狀態轉移的問題,當狀態發生轉移了,那么 Context 對象就會改變它的行為;而策略模式主要是用來封裝一組可以互相替代的算法族,并且可以根據需要動態地去替換 Context 使用的算法。
Implementation
設計一個鴨子,它可以動態地改變叫聲。這里的算法族是鴨子的叫聲行為。
public interface QuackBehavior {void quack(); } public class Quack implements QuackBehavior {@Overridepublic void quack() {System.out.println("quack!");} } public class Squeak implements QuackBehavior{@Overridepublic void quack() {System.out.println("squeak!");} } public class Duck {private QuackBehavior quackBehavior;public void performQuack() {if (quackBehavior != null) {quackBehavior.quack();}}public void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior = quackBehavior;} } public class Client {public static void main(String[] args) {Duck duck = new Duck();duck.setQuackBehavior(new Squeak());duck.performQuack();duck.setQuackBehavior(new Quack());duck.performQuack();} } squeak! quack!JDK
- java.util.Comparator#compare()
- javax.servlet.http.HttpServlet
- javax.servlet.Filter#doFilter()
總結
以上是生活随笔為你收集整理的《一天聊一个设计模式》 策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css实现下箭头
- 下一篇: Linux关闭防火墙命令red hat/