備忘錄模式用于保存和恢復對象的狀態,相信大家看過我前面的拙作就會想到原型模式也能保存一個對象在某一個時刻的狀態,那么兩者有何不同的呢?原型模式保存的是當前對象的所有狀態信息,恢復的時候會生成與保存的對象完全相同的另外一個實例;而備忘錄模式保存的是我們關心的在恢復時需要的對象的部分狀態信息,相當于快照。備忘錄模式大家肯定都見過,比如在玩游戲的時候有一個保存當前闖關的狀態的功能,會對當前用戶所處的狀態進行保存,當用戶闖關失敗或者需要從快照的地方開始的時候,就能讀取當時保存的狀態完整地恢復到當時的環境,這一點和 VMware 上面的快照功能很類似。
本程序的功能是根據循環次數隨機的生成 1~6 這 6 個數字,如果數字是 1,則金錢加一百,如果是二,則金錢減半,如果是 6,則隨機生成水果,水果分為好吃的和不好吃的,在保存的時候只保存好吃的水果,恢復的時候就只有好吃的水果了。當金錢少于當前備忘錄中金錢的一半的時候就要恢復到備忘錄的狀態;當金錢大于備忘錄的狀態的時候就要備份當前的狀態,備份的時候只備份好的水果以及當前金額,這就是游戲的功能,可以看到運行的結果的正確性。
這里有幾點要注意:
1、窄接口和寬接口。
在代碼中我已經標注出了窄接口和寬接口,如何定義這兩種接口還要看這兩種接口前面的修飾符,如果是默認的(只有本包的類可以使用),并且這些接口結合到一起可以完全的將本類的信息顯示出來,那么就是寬接口;只能在本包之中使用,如果修飾符是 public 的接口,并且只能表示本類一部分信息,因為是 public 可以在其他包中使用的,就是窄接口,只能查看部分信息,因此是窄的。如下圖所示,對于 Main 類所在的包,只能使用其他兩個類中聲明為 public 的字段和方法,因此在 Main 中只能使用窄接口來完成一定信息的讀取 getMenoy ()。這只是一個概念,強調的是類、字段、方法的可見性。
2、可見性。
同時我們也知道,public 修飾的字段和方法在任何包中都可以使用,private 修飾的字段和方法只能在本類之中使用,protected 修飾的方法可以在本包之中以及該類的子類(可以在其他包)中使用,默認的沒有任何修飾的可以在本包之中使用。這就是四種修飾關鍵字的可見性。在編程的時候我們一定要考慮這些問題,不然就會導致我們不想看到的字段、方法、類被誤用的結果。
備忘錄模式也是一種非常常見的模式,用來保存對象的部分用于恢復的信息,和原型模式有著本質的區別,廣泛運用在快照功能中,另外我們知道了寬接口和窄接口,這里的接口指的就是方法,沒其他意思,以及類的可見性。同樣的使用備忘錄模式可以使得程序可以組件化,比如打算多次撤銷當前的狀態以及不僅可以撤銷而且可以將當前的狀態保存到文件中,我們不需要修改 Gamer 的代碼就能做到,職責明確是一種非常重要的軟件工程思想。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.