scala實現備忘錄模式

2021-09-02 12:24:23 字數 1793 閱讀 4472

package com.linewell.modeldesgin.memento

import scala.collection.mutable.arraybuffer

/*** 備忘錄模式,在command模式中簡單實現過一次

* 原發器:象棋類

* created by ctao on 2015/9/1.

* @param label 標籤

* @param x x座標

* @param y y座標

*/case class chessman(var label: string, var x: int, var y: int) extends chessmanfunction

}/**

* 備忘錄樣例類

* @param label 標籤

* @param x x座標

* @param y y座標

*/case class chessmemento(label: string, x: int, y: int)

/*** 下棋方法特質

*/trait chessmanfunction 當前位置為第$行,第$列")

}/**

* 悔棋

* @param chessman 棋子

*/def undo(chessman: chessman): unit = 當前位置為第$行,第$列")

case _ => println("出現異常")}}

/*** 撤銷悔棋

* @param chessman 棋子

*/def redo(chessman: chessman): unit = 當前位置為第$行,第$列")

case length: int if -1 < length && length < mementoarraybuffer.length - 1 => index += 1

chessman.restore(mementoarraybuffer(index))

println(s"棋子$ 當前位置為第$行,第$列")

case length: int if length >= mementoarraybuffer.length - 1 => println("已經在最終位置,無法恢復")

case _ => println(s"異常$index")}}

}package com.linewell.modeldesgin.memento

/*** 測試客戶端

* created by ctao on 2015/9/1.

*/val chess = new chessman("馬",1,1)

chess.undo(chess)

chess.play(chess)

chess.y = 4

chess.play(chess)

chess.x = 5

chess.play(chess)

chess.undo(chess)

chess.undo(chess)

chess.undo(chess)

chess.redo(chess)

chess.redo(chess)

chess.redo(chess)

chess.redo(chess)

chess.undo(chess)

chess.undo(chess)

chess.undo(chess)

chess.undo(chess)

chess.undo(chess)

chess.redo(chess)

}

備忘錄模式

備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...

備忘錄模式

先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...

備忘錄模式

面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...