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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java描述设计模式(24):备忘录模式

發(fā)布時(shí)間:2025/3/16 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java描述设计模式(24):备忘录模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里

一、生活場(chǎng)景

1、場(chǎng)景描述

常見(jiàn)的視頻播放軟件都具備這樣一個(gè)功能:假設(shè)在播放視頻西游記,如果這時(shí)候切換播放視頻紅樓夢(mèng),當(dāng)再次切回播放西游記時(shí),視頻會(huì)從上次切走的時(shí)間點(diǎn)繼續(xù)播放。下面基于備忘錄設(shè)計(jì)模式來(lái)描述該場(chǎng)景流程。

2、場(chǎng)景圖解

3、代碼實(shí)現(xiàn)

public class C01_InScene {public static void main(String[] args) {Record record = new Record() ;Player player = new Player() ;PlayData pd1 = new PlayData("西游記","19:19") ;PlayData pd2 = new PlayData("紅樓夢(mèng)","29:19") ;player.setPlayData(pd1);player.saveProgress() ;System.out.println("正在播放:"+player.getPlayData().getVideoName()+":"+player.getPlayData().getPlayTime());record.put(new Progress(pd1));System.out.println("===切換播放視頻===");player.setPlayData(pd2);player.saveProgress() ;System.out.println("正在播放:"+player.getPlayData().getVideoName()+":"+player.getPlayData().getPlayTime());record.put(new Progress(pd1));System.out.println("===切回上個(gè)視頻===");player.resumeProgress(record.get(pd1.getVideoName()));System.out.println("正在播放:"+player.getPlayData().getVideoName()+":"+player.getPlayData().getPlayTime());} } /*** 視頻播放器*/ class Player {private PlayData playData ;public PlayData getPlayData() {return playData;}public void setPlayData(PlayData playData) {this.playData = playData;}public Progress saveProgress (){return new Progress(playData) ;}public void resumeProgress (Progress progress){playData = progress.getPlayData() ;} } /*** 播放進(jìn)度*/ class Progress {private PlayData playData ;public Progress (PlayData playData){this.playData = playData ;}public PlayData getPlayData() {return playData ;} } /*** 播放記錄*/ class Record {private Map<String,Progress> dataMap = new HashMap<>() ;public void put (Progress progress){dataMap.put(progress.getPlayData().getVideoName(),progress) ;}public Progress get (String videoName){return dataMap.get(videoName) ;} } /*** 播放狀態(tài)描述*/ class PlayData {private String videoName ;private String playTime ;public PlayData(String videoName, String playTime) {this.videoName = videoName;this.playTime = playTime;}public String getVideoName() {return videoName;}public void setVideoName(String videoName) {this.videoName = videoName;}public String getPlayTime() {return playTime;}public void setPlayTime(String playTime) {this.playTime = playTime;} }

執(zhí)行效果:

正在播放:西游記:19:19 ===切換播放視頻=== 正在播放:紅樓夢(mèng):29:19 ===切回上個(gè)視頻=== 正在播放:西游記:19:19

二、備忘錄模式

1、基礎(chǔ)概念

備忘錄模式屬于行為型模式,其用意在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。后續(xù)可將該對(duì)象恢復(fù)到原先保存的狀態(tài)。備忘錄對(duì)象主要用來(lái)記錄一個(gè)對(duì)象的某種狀態(tài),或者某些數(shù)據(jù),當(dāng)要做回退時(shí),可以從備忘錄對(duì)象里獲取原來(lái)的數(shù)據(jù)進(jìn)行恢復(fù)操作。

2、模式圖解

3、核心角色

  • 備忘錄角色

負(fù)責(zé)保存對(duì)象狀態(tài)的記錄,即Originator內(nèi)部狀態(tài)。

  • 發(fā)起人角色

創(chuàng)建一個(gè)含有當(dāng)前的內(nèi)部狀態(tài)的備忘錄對(duì)象,用來(lái)保存狀態(tài)。

  • 守護(hù)者對(duì)象

提供合理的方式,負(fù)責(zé)保存多個(gè)備忘錄對(duì)象。

4、源碼實(shí)現(xiàn)

public class C02_Memento {public static void main(String[] args) {Originator originator = new Originator();Caretaker caretaker = new Caretaker();originator.setState("狀態(tài)1:State01");caretaker.add(originator.saveStateMemento());originator.setState("狀態(tài)2:State02");caretaker.add(originator.saveStateMemento());System.out.println("當(dāng)前的狀態(tài)是 =" + originator.getState());// 恢復(fù)狀態(tài)originator.getStateFromMemento(caretaker.get(0));System.out.println("當(dāng)前的狀態(tài)是 =" + originator.getState());} } /*** 守護(hù)者對(duì)象*/ class Caretaker {private List<Memento> mementoList = new ArrayList<>();public void add(Memento memento) {mementoList.add(memento);}public Memento get (int index) {return mementoList.get(index);} } /*** 備忘錄角色*/ class Memento {private String state;public Memento(String state) {super();this.state = state;}public String getState() {return state;} } /*** 發(fā)起人角色*/ class Originator {private String state;public String getState() {return state;}public void setState(String state) {this.state = state;}public Memento saveStateMemento() {return new Memento(state);}public void getStateFromMemento(Memento memento) {state = memento.getState();} }

三、模式總結(jié)

1、優(yōu)缺點(diǎn)描述

備忘錄模式提供一種可以恢復(fù)狀態(tài)的機(jī)制,實(shí)現(xiàn)狀態(tài)的封裝,能夠比較方便地回到某個(gè)歷史的狀態(tài);常常與命令模式和迭代器模式一同使用。如果類的成員變量過(guò)多,會(huì)占用比較大的內(nèi)存資源,為了節(jié)約內(nèi)存,備忘錄模式可以和原型模式配合使用。

2、應(yīng)用場(chǎng)景

  • 瀏覽器的前進(jìn)和回退;
  • 數(shù)據(jù)庫(kù)備份與還原;
  • 編輯器Ctrl+Z撤銷;
  • 虛擬機(jī)生成快照與恢復(fù);
  • Git版本管理,代碼的提交和回滾。

四、源代碼地址

GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent

總結(jié)

以上是生活随笔為你收集整理的Java描述设计模式(24):备忘录模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 伊人日日夜夜 | 911色| 麻豆tv在线观看 | 日韩精品综合 | 色先锋av| 欧美jizz欧美性大全 | 国产91丝袜在线播放九色 | 91精品国产91综合久久蜜臀 | 亚洲影院av | 欧美鲁鲁 | 波多野结衣免费视频观看 | 美脚の诱脚舐め脚视频播放 | 国产熟女一区二区三区五月婷 | 国产妇女馒头高清泬20p多 | 视频二区在线 | 中文字幕视频一区 | 黑人三级视频 | 青少年xxxxx性开放hg | 久久亚洲电影 | 午夜影视体验区 | 日韩在线黄色 | 91国在线 | 三级国产视频 | 天美视频在线观看 | 欧美日韩中文字幕视频 | 成人av动漫在线 | 久久久久久久香蕉 | 久久精品美女视频 | 久草操 | 国产激情综合五月久久 | 在线欧美| 亚洲小视频网站 | 亚洲Av无码成人精品区伊人 | 国产1区 | jizz18国产| 欧美日韩少妇精品 | 嫩草研究院在线 | 中文字幕无码毛片免费看 | 五月天久久久久 | 双性娇喘浑圆奶水h男男漫画 | 欧美波霸影院 | 欧美精品一区二区三区久久久竹菊 | 欧美极品少妇×xxxbbb | 精品国内自产拍在线观看视频 | 丰满少妇熟乱xxxxx视频 | 日韩欧美在线中文字幕 | 福利在线视频导航 | 韩国av中文字幕 | 黑人巨大国产9丨视频 | 色老大影院 | 日日人人 | av免费的 | 亚洲丁香婷婷 | 秋霞福利视频 | 在线观看成人 | 91九色论坛| 91jk制服白丝超短裙大长腿 | www九九九 | 99在线精品视频免费观看软件 | 高清一区二区 | 久久久久麻豆 | 阿娇全套94张未删图久久 | 91av影视| 亚洲欧美伊人 | 国产高清在线一区 | 日日躁夜夜躁狠狠久久av | 成人福利免费视频 | 国产成人精品久久 | 亚洲AV无码精品一区二区三区 | 国产a级精品 | 韩国视频一区二区三区 | 99视频久久 | 日韩不卡视频一区二区 | 久草视频在线看 | 日本在线观看一区 | 欧美一级录像 | 欧美日本一区二区三区 | 久久久精品在线观看 | 天堂а在线中文在线新版 | 在线观看国产一级片 | 香港av在线 | 久草精品视频在线观看 | 国产av天堂无码一区二区三区 | 男生操女生在线观看 | 精品在线观看视频 | 色综合天天射 | 国产黄色特级片 | 亚洲熟女www一区二区三区 | 日韩欧美一区二区三区在线观看 | 超碰在线99 | 成人精品综合 | 72pao成人国产永久免费视频 | 男女午夜免费视频 | 国产第100页 | www.爱爱| 亚洲无吗在线观看 | 最近2018年手机中文字幕版 | 国产精品一区二区电影 | 成人高潮片免费视频 |