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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《一天聊一个设计模式》备忘录

發(fā)布時間:2023/12/13 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《一天聊一个设计模式》备忘录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

備忘錄(Memento)

Intent

在不違反封裝的情況下獲得對象的內(nèi)部狀態(tài),從而在需要時可以將對象恢復(fù)到最初狀態(tài)。

Class Diagram

  • Originator:原始對象
  • Caretaker:負(fù)責(zé)保存好備忘錄
  • Memento:備忘錄,存儲原始對象的的狀態(tài)。備忘錄實際上有兩個接口,一個是提供給 Caretaker 的窄接口:它只能將備忘錄傳遞給其它對象;一個是提供給 Originator 的寬接口,允許它訪問到先前狀態(tài)所需的所有數(shù)據(jù)。理想情況是只允許 Originator 訪問本備忘錄的內(nèi)部狀態(tài)。

Implementation

以下實現(xiàn)了一個簡單計算器程序,可以輸入兩個值,然后計算這兩個值的和。備忘錄模式允許將這兩個值存儲起來,然后在某個時刻用存儲的狀態(tài)進(jìn)行恢復(fù)。

實現(xiàn)參考:Memento Pattern - Calculator Example - Java Sourcecode

/*** Originator Interface*/ public interface Calculator {// Create MementoPreviousCalculationToCareTaker backupLastCalculation();// setMementovoid restorePreviousCalculation(PreviousCalculationToCareTaker memento);int getCalculationResult();void setFirstNumber(int firstNumber);void setSecondNumber(int secondNumber); } /*** Originator Implementation*/ public class CalculatorImp implements Calculator {private int firstNumber;private int secondNumber;@Overridepublic PreviousCalculationToCareTaker backupLastCalculation() {// create a memento object used for restoring two numbersreturn new PreviousCalculationImp(firstNumber, secondNumber);}@Overridepublic void restorePreviousCalculation(PreviousCalculationToCareTaker memento) {this.firstNumber = ((PreviousCalculationToOriginator) memento).getFirstNumber();this.secondNumber = ((PreviousCalculationToOriginator) memento).getSecondNumber();}@Overridepublic int getCalculationResult() {// result is adding two numbersreturn firstNumber + secondNumber;}@Overridepublic void setFirstNumber(int firstNumber) {this.firstNumber = firstNumber;}@Overridepublic void setSecondNumber(int secondNumber) {this.secondNumber = secondNumber;} } /*** Memento Interface to Originator** This interface allows the originator to restore its state*/ public interface PreviousCalculationToOriginator {int getFirstNumber();int getSecondNumber(); } /*** Memento interface to CalculatorOperator (Caretaker)*/ public interface PreviousCalculationToCareTaker {// no operations permitted for the caretaker } /*** Memento Object Implementation* <p>* Note that this object implements both interfaces to Originator and CareTaker*/ public class PreviousCalculationImp implements PreviousCalculationToCareTaker,PreviousCalculationToOriginator {private int firstNumber;private int secondNumber;public PreviousCalculationImp(int firstNumber, int secondNumber) {this.firstNumber = firstNumber;this.secondNumber = secondNumber;}@Overridepublic int getFirstNumber() {return firstNumber;}@Overridepublic int getSecondNumber() {return secondNumber;} } /*** CareTaker object*/ public class Client {public static void main(String[] args) {// program startsCalculator calculator = new CalculatorImp();// assume user enters two numberscalculator.setFirstNumber(10);calculator.setSecondNumber(100);// find resultSystem.out.println(calculator.getCalculationResult());// Store result of this calculation in case of errorPreviousCalculationToCareTaker memento = calculator.backupLastCalculation();// user enters a numbercalculator.setFirstNumber(17);// user enters a wrong second number and calculates resultcalculator.setSecondNumber(-290);// calculate resultSystem.out.println(calculator.getCalculationResult());// user hits CTRL + Z to undo last operation and see last resultcalculator.restorePreviousCalculation(memento);// result restoredSystem.out.println(calculator.getCalculationResult());} } 110 -273 110

JDK

  • java.io.Serializable

總結(jié)

以上是生活随笔為你收集整理的《一天聊一个设计模式》备忘录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。