命令模式和備忘錄模式的對比

2021-08-21 16:20:46 字數 3154 閱讀 8243

首先先簡單的分析下我們下面要講解的案例當中的角色有哪些,對於命令模式和備忘錄模式都有分開來進行講解

命令模式備忘錄模式

下面就簡單的介紹下銀行增加賬戶和刪除賬戶的金錢變化的案例,主要體會思想

首先如果我們是使用的是基於命令模式的話,案例的內部結構如下所示

銀行實體類

import foundation

//銀行實體類

class bankentry:nsobject

}

命令模式當中的接受者物件也就是銀行類,我們增加使用者就是對這個銀行類進行操作,也就是說這裡面是去實現了具體的業務邏輯的比如說增加使用者和刪除使用者

import foundation

class bank:nsobject

//撤銷使用者

func undoentry(entry:bankentry)

}func printentrys()

}

下面就是命令介面類,主要做邏輯思維

import foundation

protocol bankcommandprotocol

下面就是將增加使用者的操作給封裝成乙個命令類

import foundation

class

bankuseraddcommand:bankcommandprotocol

//撤銷使用者的命令

func execute(entry: bankentry)

}

下面就是將使用者撤銷的命令去做乙個封裝成命令

import foundation

class

bankuserundocommand:bankcommandprotocol

private var bank:bank

init(_

bank:bank)

}

下面就是基於備忘錄模式的案例

下面是備忘錄物件bankmemo

import foundation

class bankmemo:nsobject

self.nextid = org.nextid

self.total = org.total

}//然後去進行備忘錄設定}}

建立備忘錄物件的管理器

import foundation

class bankoriginator:nsobject

//建立備忘錄物件

func creatememo() -> bankmemo

//這裡就是去呼叫備忘錄物件的方法進行恢復狀態

//列印出總值

func printentry()

}

下面就是具體的應用過程基於備忘錄模式的應用

//備忘錄物件的管理物件

let org = bankoriginator()

//新增實體物件

org.addentry(id: 1, amount: 3000)

org.addentry(id: 2, amount: 2000)

//建立備忘錄物件

let memo = org.creatememo()

org.addentry(id: 3, amount: 2000)

org.addentry(id: 4, amount: 2000)

org.printentry()

//新增備忘錄(處理,如果已經恢復,那麼就沒有必要恢復了)

org.printentry()

下面是總體的金額顯示全部儲存為9000,然後我們建立的備忘錄物件可以恢復,然後到我們建立備忘錄物件的父就是恢復到5000了

對於命令模式的處理如下所示

let bank = bank()

//建立增加使用者命令物件

let bankaddcmd = bankuseraddcommand(bank)

//建立撤銷使用者命令物件

let bankundocmd = bankuserundocommand(bank)

//建立例項使用者

let bankentry1 = bankentry(id: 1, amount: 2000)

let bankentry2 = bankentry(id: 2, amount: 3000)

//執行新增使用者的命令

bankaddcmd.execute(entry: bankentry1)

bankaddcmd.execute(entry: bankentry2)

//然後列印出結果

bank.printentrys()

bankundocmd.execute(entry: bankentry1)

bank.printentrys()

//執行撤銷的操作

備忘錄模式是能操作整個過程的,我們隨時可以進行恢復,如果是命令模式的話,我們要去操作的就是只有一步一步的進行撤銷操作的

備忘錄模式

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

備忘錄模式

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

備忘錄模式

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