小A:“備忘錄模式與命令模式有一些相似之處,他們都保存狀態(tài),他們都可以擁有前進(jìn)與後退,但是他們到底在設(shè)計(jì)上與實(shí)現(xiàn)上有哪些差別呢?”
大B:從UML我們可以清晰的看到區(qū)別,一個(gè)保存Object的狀態(tài),一個(gè)保存命令。相同:都可以前進(jìn)後退。不同:執(zhí)行對(duì)象不同,保存狀態(tài)的對(duì)象不同,所執(zhí)行的操作也不相同。由於兩種模式時(shí)所對(duì)應(yīng)的需求截然不同,應(yīng)該說(shuō)備忘錄更加穩(wěn)定一些,而命令的執(zhí)行則更加廣泛,可能一個(gè)子類的Command對(duì)應(yīng)一個(gè)Receiver。所以相對(duì)而言Command模式會(huì)更加靈活一些。應(yīng)用:Command模式:將命令當(dāng)作一個(gè)對(duì)象進(jìn)行保存,進(jìn)行Redo,Undo操作。
例子:在繪圖系統(tǒng)中經(jīng)常需要進(jìn)行Redo,Undo操作。Memento模式:獲取和保存對(duì)象的內(nèi)部狀態(tài)。例子:網(wǎng)上購(gòu)物時(shí)購(gòu)物車既可以理解爲(wèi)Memento。