摘要:備忘錄模式一備忘錄模式定義在不破壞封閉性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。
備忘錄模式
一. 備忘錄模式 1.1 定義在不破壞封閉性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復(fù)到原先保存的狀態(tài).
1.2 角色備忘錄(Memento):用于存儲發(fā)起者對象的內(nèi)部狀態(tài).
發(fā)起者(Orginator):創(chuàng)建備忘錄,記錄或恢復(fù)自身狀態(tài).
管理者(CareTaker):負(fù)責(zé)管理備忘錄.
二. 具體實(shí)現(xiàn) 2.1 創(chuàng)建備忘錄類public class Memento { private String state; public Memento(String state){ this.state = state; } public String getState() { return state; } }2.2 創(chuàng)建發(fā)起者類
public class Originator { private String state; public void setState(String state) { System.out.println("state changed : " + state); this.state = state; } public Memento save(){ return new Memento(state); } }2.3 創(chuàng)建管理者類
public class CareTaker { private Memento memento; public void save(Memento memento){ System.out.println("Memento save ..." + memento.getState()); this.memento = memento; } public Memento read(){ System.out.println("Memento read ..." + memento.getState()); return memento; } }2.4 調(diào)用
public static void main(String[] args) { Originator originator = new Originator(); CareTaker careTaker = new CareTaker(); originator.setState("1"); careTaker.save(originator.save()); originator.setState("2"); careTaker.read(); }2.5 輸出
state changed : 1 Memento save ...1 state changed : 2 Memento read ...1三. 優(yōu)缺點(diǎn) 3.1 優(yōu)點(diǎn)
可以恢復(fù)到之前的狀態(tài).
3.2 缺點(diǎn)耗費(fèi)資源.
四. 源碼https://github.com/Seasons20/DisignPattern.git
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69667.html
摘要:備忘錄模式常常與命令模式和迭代子模式一同使用。自述歷史所謂自述歷史模式實(shí)際上就是備忘錄模式的一個變種。在備忘錄模式中,發(fā)起人角色負(fù)責(zé)人角色和備忘錄角色都是獨(dú)立的角色。 備忘錄模式(Memento Pattern)屬于行為型模式的一種,在不破壞封裝特性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣就可以將該對象恢復(fù)到原先保存的狀態(tài)。 概述 備忘錄模式又叫做快照模式(...
摘要:但是發(fā)出者并不清楚到底最終那個對象會處理該請求,所以,責(zé)任鏈模式可以實(shí)現(xiàn),在隱瞞客戶端的情況下,對系統(tǒng)進(jìn)行動態(tài)的調(diào)整。因?yàn)樵L問者模式使得算法操作增加變得容易。訪問者模式將有關(guān)行為集中到一個訪問者對象中,其改變不影響系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。 總體分為3大類:創(chuàng)建型模式 (5種):工廠方法、抽象工廠、單例、建造者、原型結(jié)構(gòu)型模式(7種):適配器、裝飾器、代理、外觀、橋接、組合、享元行為型模式(11種...
摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計模式五適配器模式適配器模式將某個對象的接生成器和協(xié)程的實(shí)現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實(shí)戰(zhàn)) 這篇文章主要介紹利用 R...
摘要:享元模式享元模式盡可能的讓用戶復(fù)用已經(jīng)有的對象,從而避免造成反復(fù)創(chuàng)建對象的資源浪費(fèi)。享元模式要求大部分的對象可以外部化。 showImg(https://segmentfault.com/img/bVbuYD9?w=1920&h=1200); 引子 設(shè)計模式是很多程序員總結(jié)出來的最佳實(shí)踐。曾經(jīng)在剛開始寫項目的時候?qū)W習(xí)過設(shè)計模式,在開發(fā)過程中,也主動或者被動的使用過。現(xiàn)在寫代碼雖說不會特...
摘要:舉例遇到多個構(gòu)造器參數(shù)時考慮使用構(gòu)建器,而不是重疊構(gòu)造器模式或模式調(diào)用方法。靜態(tài)工廠和構(gòu)造器有個共同的局限性它們不能很好地擴(kuò)展大量的可選參數(shù)構(gòu)建器模式年月日客戶端調(diào)用缺點(diǎn)構(gòu)建器模式可能比重疊構(gòu)造器更加冗長,參數(shù)多時使用較好。 設(shè)計模式 此文章部分來于網(wǎng)絡(luò),為了學(xué)習(xí)總結(jié)。 一、原型模式(Prototype) 介紹:從一個對象再創(chuàng)建另一個對象,而不需知道任何細(xì)節(jié)。 1、兩種表現(xiàn)形式 (1)...
閱讀 3564·2021-10-15 09:43
閱讀 3487·2021-09-02 15:21
閱讀 2193·2021-08-11 11:23
閱讀 3238·2019-08-30 15:54
閱讀 1923·2019-08-30 13:54
閱讀 3199·2019-08-29 18:35
閱讀 668·2019-08-29 16:58
閱讀 1736·2019-08-29 12:49