状态模式和策略模式的区别
生活随笔
收集整理的這篇文章主要介紹了
状态模式和策略模式的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
區別主要體現在行為上,而不是結構上,所以,看時序圖就能很好的看出兩者的區別。
狀態模式
看1.4,狀態B是狀態A創建的,也就是由系統本身控制的。調用者不能直接指定或改變系統的狀態轉移
所以,狀態是系統自身的固有的,調用者不能控制系統的狀態轉移。比如,一個請假單有“部長審批”-“經理審批”-“審批通過”-“審批不通過”等狀態,請假者沒有辦法將一個部長都還沒審批完的請假單提交給經理,這個狀態轉換只能系統自己完成。
策略模式
看1.5,策略B是調用者指定的,系統自身并不能指定或改變策略。
所以策略是外界給的,策略怎么變,是調用者考慮的事情,系統只是根據所給的策略做事情。這時系統很像是一臺電腦,根據指令執行動作,打一鞭子滾一滾。
知識檢測
小明中國出發到日本再到美國去旅行,在不同的國家都要做兩件事,問候和打招呼,怎么做取決于他在哪個國家。(就是編程時經常碰到的多語言問題了)根據需求,請問該使用哪種模式?開發者寫了下面的代碼,請問下面的代碼是狀態模式還是策略模式?
public class GreetingContext {private Country country;public GreetingContext(Country country){this.country = country;}public void changeCountry(Country country){this.country = country;}public void sayHello(){country.sayhello();}public void greet(){country.greet();}}//國家接口 public interface Country {void sayhello();void greet(); }//中國 public class China implements Country {public void sayhello() {System.out.println("你好!");}public void greet() {System.out.println("握手!");} }//美國 public class America implements Country {public void sayhello() {System.out.println("hello!");}public void greet() {System.out.println("kiss");} }//調用 public class Client {public static void main(String[] args){GreetingContext context = new GreetingContext(new China());context.sayHello();context.greet();context.changeCountry(new America());context.sayHello();context.greet();} }參考:狀態模式和策略模式的比較
圖片來自:圖說設計模式
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的状态模式和策略模式的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代码整洁之道-程序员的职业素养
- 下一篇: 在ArcMap中直接加载谷歌地球影像的方