日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

状态模式和策略模式的区别

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 状态模式和策略模式的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

區別主要體現在行為上,而不是結構上,所以,看時序圖就能很好的看出兩者的區別。

狀態模式

看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();} }

參考:狀態模式和策略模式的比較

圖片來自:圖說設計模式

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的状态模式和策略模式的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。