1. 程式人生 > >設計模式練習(16)——備忘錄模式

設計模式練習(16)——備忘錄模式

備忘錄模式

一、題目:

某軟體公司正在開發一款網遊,為了給玩家提供更多方便,在遊戲過程中可以設定一個恢復點,用於儲存當前的遊戲場景,如果在後續遊戲過程中,玩家角色“不幸犧牲”,玩家可以返回到先前儲存的場景,從恢復點開始重新遊戲,試用備忘錄模式實現。
(1)繪製備忘錄模式結構檢視
(2)給出例項類圖並實現程式碼

二、所用模式結構檢視:

這裡寫圖片描述

三、例項類圖:

這裡寫圖片描述

四、例項實現程式碼:

(因為區分,所以在類的前面加了Gj19)

原發器

package gjMementoPattern;

/**
 * 原發器
 * @author gong
 *
 */
public class
Gj19Originator {
private String state; public Gj19Originator(){ } //建立一個備忘錄物件 public Gj19Memento createMemento(){ return new Gj19Memento(this); } //根據備忘錄物件恢復原發器狀態 public void restoreMemento(Gj19Memento m) { this.state = m.getState(); } public
String getState() { return this.state; } public void setState(String state) { this.state = state; } public void show(){ System.out.println("-------"+this.state+"-------"); } }

備忘錄類

package gjMementoPattern;

/**
 * 備忘錄類
 * 
 * @author gong
 *
 */
public
class Gj19Memento { private String state; public Gj19Memento(Gj19Originator gj19Originator) { state = gj19Originator.getState(); } public String getState() { return this.state; } public void setState(String state) { this.state = state; } }

負責人

package gjMementoPattern;
/**
 * 負責人
 * @author gong
 *
 */
public class Gj19Caretaker {

    private Gj19Memento gj19Memento;

    public void setGj19Memento(Gj19Memento gj19Memento) {
        this.gj19Memento = gj19Memento;
    }

    public Gj19Memento getGj19Memento(){
        return gj19Memento;
    }


}

備忘錄模式客戶端

package gjMementoPattern;
/**
 * 備忘錄模式客戶端
 * @author gong
 *
 */
public class Client {
    public static void main(String[] args) {
        Gj19Originator gj19Originator = new Gj19Originator();

        Gj19Caretaker caretaker = new Gj19Caretaker();

        gj19Originator.setState("儲存遊戲之後的遊戲恢復點");
        gj19Originator.show();
        System.out.println("============================="+"\n");
        //儲存備忘錄
        caretaker.setGj19Memento(gj19Originator.createMemento());
        //進行遊戲
        gj19Originator.setState("天公不作美= =,您已經犧牲!");
        gj19Originator.show();

        System.out.println("============================="+"\n");
        //從備忘錄中恢復
        gj19Originator.restoreMemento(caretaker.getGj19Memento());
        gj19Originator.show();
        System.out.println("============================="+"\n");
    }
}

五、執行結果:

這裡寫圖片描述

相關推薦

設計模式練習16——備忘錄模式

備忘錄模式 一、題目: 某軟體公司正在開發一款網遊,為了給玩家提供更多方便,在遊戲過程中可以設定一個恢復點,用於儲存當前的遊戲場景,如果在後續遊戲過程中,玩家角色“不幸犧牲”,玩家可以返回到先前儲存的場景,從恢復點開始重新遊戲,試用備忘錄模式實現。 (1

設計模式練習18——狀態模式

狀態模式 一、題目: 某紙牌遊戲中,人物角色具有入門級(Primary),熟練級(Secondary),高手級(Professional)和骨灰級(Final)四種等級,角色的等級與積分相對應,遊戲勝利將增加積分,失敗則扣除積分,入門級具有最基本的遊戲功能

設計模式練習19——策略模式

策略模式 一、題目: 設計一個網上書店,該系統中所有的計算機圖書(ComputerBook),每本都有10%的折扣;所有的語言類圖書(LanguageBook),每本有2元的折扣;小說類圖書以每100元有10元的折扣,用策略模式設計該系統 (1)繪製策略

設計模式練習11——代理模式

代理模式 一、題目: 在某應用軟體中,需要記錄業務方法的呼叫日期,在不修改現有業務類的基礎上,為每一個類提供一個日記記錄代理類,在代理類中輸出日誌,如在業務方法Mehtod()的呼叫之前,輸出“Method方法被呼叫,呼叫時間2016.11.18 11:1

設計模式-16模版模式 swift版

基本 protect pla without 屬性 模板方法 分享圖片 dal ont 一,概念:   定義一個算法中的操作框架,而將一些步驟延遲到子類中。使得子類可以不改變算法的結構即可重定義該算法的某些特定步驟。(Define the skeleton of an al

常用軟體設計模式備忘錄模式

備忘錄模式:在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態 優點:1、給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。      &nb

設計模式練習15——中介者模式

中介者模式 一、題目: 某軟體公司需要開發一套圖形使用者介面類庫,該類庫包含若干個預定義的窗格物件,例如TextPane,ListPane,GraphicPane,視窗之間不允許直接呼叫,具有該類庫的應用由一個包含一組窗格的視窗(Window)組成,視窗需

設計模式練習1——簡單工廠模式

簡單工廠模式 一、題目: 使用簡單工廠模式模擬女媧(Nvwa)造人(Person),如果傳入引數M,則返回一個Man物件,如果傳入引數W。則返回一個物件Woman,用java語言實現該場景。現在需要

設計模式C++實現12——備忘錄模式

       軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了面向物件程式語言的重要特性:封裝、繼承、多型,真正領悟設計模式的精髓是可能一個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用C++寫了個小例子,加深一下理解。主要參考《大話設計模式》

設計模式練習17——觀察者模式

觀察者模式 一、題目: 某公司欲開發一套機房監控系統,如果機房達到一定指定溫度,感測器將作出反應,將訊號傳遞給響應裝置,如警示燈將閃爍,報警器將發出警報,安全逃生門將自動開啟、隔熱門將自動關閉,每一響應裝置的行為右專門的程式來控制,為支援將來引入新型別的響

設計模式練習3——抽象工廠模式

抽象工廠模式 一、題目: 某軟體公司要推出一款新的手機遊戲軟體,該軟體支援IOS、Android和Windows Phone等多個智慧手機作業系統平臺,針對不同的手機作業系統,該遊戲軟體提供了不同的遊戲操作控制類(OperationController)和

設計模式解密5- 外觀模式門面模式

src 內部 耦合度 解決 臺電 統一 方法 英文 適配器 1、簡介 外觀模式提供了一個統一的接口,用來訪問子系統中的一群接口。外觀定義了一個高層接口,讓子系統更容易使用。 使用外觀模式時,我們創建了一個統一的類,用來包裝子系統中一個或多個復雜的類,客戶端可以直接通

設計模式解密22- 訪問者模式

ges action oid 使用 復合 con 9.png ava array 前言:訪問者模式拆分 訪問者模式基礎篇 :http://www.cnblogs.com/JsonShare/p/7380772.html 訪問者模式擴展篇 - 分派的概念: htt

設計模式解密22- 訪問者模式 - 擴展篇分派的概念

綁定 接受 傳遞 ble 實例 擴展 back exp 重載方法 前言:訪問者模式拆分 訪問者模式基礎篇 :http://www.cnblogs.com/JsonShare/p/7380772.html 訪問者模式擴展篇 - 分派的概念: http://www.cn

Java 設計模式系列組合模式

ima 技術分享 client 索引 有變 int spa 初始 類型 Java 設計模式系列(九)組合模式 將對象組合成樹形結構以表示“部分-整體”的層次結構。組合模式使得用戶對單個對象的使用具有一致性。 一、組合模式結構 Component: 抽象的組件對象,為

23種設計模式代理模式python_c++實現

23種設計模式之(六)代理模式(Proxy) 本文主要介紹23種設計模式之原型模式,附詳細python/c++示例程式碼。 - 概念 - 應用場景 - 注意事項 - 程式碼示例 - 總結 - 程式碼連結 代理模式(Proxy) 概念

23種設計模式裝飾模式python_c++實現

23種設計模式之(九)組合模式(Composite) 本文主要介紹23種設計模式之組合模式,附詳細python/c++示例程式碼。 - 概念 - 應用場景 - 注意事項 - 程式碼示例 - 總結 - 程式碼連結 組合模式(Composit

23種設計模式十三模板模式python_c++實現

23種設計模式之(十三)模板模式(TemplateMethod) 本文主要介紹23種設計模式之模板模式,附詳細python/c++示例程式碼。 - 概念 - 應用場景 - 注意事項 - 程式碼示例 - 總結 - 程式碼連結 模板模式(Te

《JavaScript設計模式與開發實踐》模式3—— 代理模式

代理模式是為一個物件提供一個代用品或佔位符,以便控制對它的訪問 故事背景: 假設當 A 在心情好的時候收到花,小明表白成功的機率有 60%,而當 A 在心情差的時候收到花,小明表白的成功率無限趨近於 0。 小明跟 A 剛剛認識兩天,還無法辨別 A 什麼時候心情好。如果不合時宜地把花送給 A,花

《JavaScript設計模式與開發實踐》模式6—— 命令模式

命令模式是最簡單和優雅的模式之一,命令模式中的命令(command)指的是一個執行某些特定事情的指令。 應用場景     有時候需要向某些物件傳送請求,但是並不知道請求的接收者是誰,也不知道被請求的操作是什麼。此時希望用一種鬆耦合的方式來設計程式,使得請求