<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      設(shè)計(jì)模式之備忘錄模式

      備忘錄模式(Memento Pattern)官方的定義是這樣的:
      在不破壞封閉的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣以后就可將該對(duì)象恢復(fù)到原先保存的狀態(tài)。它是面向?qū)ο蟮?3種設(shè)計(jì)模式中的一種,屬于行為模式的范圍。
      直白點(diǎn)說(shuō)就是:
      我們可以在不暴露更多字段的前提下,直接將某個(gè)對(duì)象保存到其他地方,可以是磁盤(pán),也可以是內(nèi)存。
      有些地方也將之稱(chēng)為快照模式,就是給當(dāng)前對(duì)象做一個(gè)快照。

      一般我們將備忘錄模式定義為3個(gè)組成角色:
      1、Originator 發(fā)起人,有些人將他翻譯為原發(fā)器,我是非常不認(rèn)同的。
      什么叫原發(fā)器?本人查了辭海等在線(xiàn)網(wǎng)站,壓根就沒(méi)有這個(gè)詞,我非常不人認(rèn)同最初的譯者,憑感覺(jué)隨意造詞。
      Originator 查詢(xún)了谷歌翻譯(防盜連接:本文首發(fā)自http://www.rzrgm.cn/jilodream/ )
      a person who creates or initiates something.
      大概可以理解為 創(chuàng)始人或者是最初發(fā)起某個(gè)事情的人,所以這里可以理解為驅(qū)動(dòng)、發(fā)起生成備忘錄的角色。
      2、Memento 備忘錄,用來(lái)存儲(chǔ)要保存對(duì)象的內(nèi)部狀態(tài),也就是快照。
      3、Caretaker 負(fù)責(zé)人 負(fù)責(zé)保存和管理備忘錄的。

      下面我們寫(xiě)一個(gè)例子,
      背景:模仿超級(jí)馬里奧,可以吃金幣,移動(dòng)

      主類(lèi):

       1 package com.example.demo.learn.pattern.behavior.memento;
       2 
       3 import com.alibaba.nacos.shaded.com.google.common.collect.Maps;
       4 
       5 import java.util.Map;
       6 
       7 /**
       8  * @discription
       9  */
      10 public class RecordSystem {
      11 
      12     private static Map<String, String> recordMap = Maps.newHashMap();
      13 
      14     public static void saveRecord(MapInfo mapInfo, String index) {
      15         recordMap.put(index, mapInfo.saveRecord());
      16     }
      17 
      18     public static MapInfo getRecord(String time) {
      19         if (recordMap.containsKey(time)) {
      20             return MapInfo.loadRecord(recordMap.get(time));
      21         }
      22         return null;
      23     }
      24 }

      游戲內(nèi)容類(lèi):

       1 package com.example.demo.learn.pattern.behavior.memento;
       2 
       3 import com.alibaba.fastjson.JSON;
       4 import lombok.Data;
       5 
       6 /**
       7  * @discription
       8  */
       9 @Data
      10 public class MapInfo {
      11     private Location marioLocation = new Location(0, 100, 1);
      12     private int golden = 0;
      13 
      14     public void touchGolden() {
      15         golden++;
      16     }
      17 
      18     public void marioMove(int xv, int yv) {
      19         int newX = marioLocation.getX() + xv;
      20         marioLocation.setX(newX);
      21 
      22         int newY = marioLocation.getY() + yv;
      23         marioLocation.setY(newY);
      24     }
      25 
      26     //馬里奧調(diào)頭
      27     public void marioTuneBack() {
      28         int forward = marioLocation.getForward() * -1;
      29         marioLocation.setX(forward);
      30     }
      31 
      32     public String saveRecord() {
      33         return JSON.toJSONString(marioLocation) + ";" + golden;
      34     }
      35 
      36     public static MapInfo loadRecord(String recordContent) {
      37         String[] contents = recordContent.split(";");
      38         MapInfo mapInfo = new MapInfo();
      39         Location marioLocation = JSON.parseObject(contents[0], Location.class);
      40         mapInfo.setMarioLocation(marioLocation);
      41         mapInfo.setGolden(Integer.valueOf(contents[1]));
      42         return mapInfo;
      43     }
      44 
      45     public static MapInfo initMap() {
      46         MapInfo mapInfo = new MapInfo();
      47         return mapInfo;
      48     }
      49 }

       

      package com.example.demo.learn.pattern.behavior.memento;
      
      import lombok.AllArgsConstructor;
      import lombok.Data;
      
      /**
       * @discription
       */
      
      @AllArgsConstructor
      @Data
      public class Location {
          //坐標(biāo)
          private int x;
          //坐標(biāo)
          private int y;
      
          //方向 -1向左,1向右
          private int forward;
      }

      游戲記錄存儲(chǔ)

       1 package com.example.demo.learn.pattern.behavior.memento;
       2 
       3 import com.alibaba.nacos.shaded.com.google.common.collect.Maps;
       4 
       5 import java.util.Map;
       6 
       7 /**
       8  * @discription
       9  */
      10 public class RecordSystem {
      11 
      12     private static Map<String, String> recordMap = Maps.newHashMap();
      13 
      14     public static void saveRecord(MapInfo mapInfo, String index) {
      15         recordMap.put(index, mapInfo.saveRecord());
      16     }
      17 
      18     public static MapInfo getRecord(String time) {
      19         if (recordMap.containsKey(time)) {
      20             return MapInfo.loadRecord(recordMap.get(time));
      21         }
      22         return null;
      23     }
      24 }

      輸出大概是這樣:

      "C:\Program Files\Java\jdk-11\bin\java.exe" "-javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2023.2\lib\idea_rt.jar=65256:E:\Program Files\JetBrains\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath E:\code\common\learn-design-pattern\target\classes;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-starter\2.6.15\spring-boot-starter-2.6.15.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot\2.6.15\spring-boot-2.6.15.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-autoconfigure\2.6.15\spring-boot-autoconfigure-2.6.15.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-starter-logging\2.6.15\spring-boot-starter-logging-2.6.15.jar;E:\Maven\learnDesignPattenRepo\ch\qos\logback\logback-classic\1.2.12\logback-classic-1.2.12.jar;E:\Maven\learnDesignPattenRepo\ch\qos\logback\logback-core\1.2.12\logback-core-1.2.12.jar;E:\Maven\learnDesignPattenRepo\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;E:\Maven\learnDesignPattenRepo\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;E:\Maven\learnDesignPattenRepo\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;E:\Maven\learnDesignPattenRepo\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;E:\Maven\learnDesignPattenRepo\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-core\5.3.27\spring-core-5.3.27.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-jcl\5.3.27\spring-jcl-5.3.27.jar;E:\Maven\learnDesignPattenRepo\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-starter-web\2.6.15\spring-boot-starter-web-2.6.15.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-starter-json\2.6.15\spring-boot-starter-json-2.6.15.jar;E:\Maven\learnDesignPattenRepo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.5\jackson-datatype-jdk8-2.13.5.jar;E:\Maven\learnDesignPattenRepo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.5\jackson-datatype-jsr310-2.13.5.jar;E:\Maven\learnDesignPattenRepo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.5\jackson-module-parameter-names-2.13.5.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-starter-tomcat\2.6.15\spring-boot-starter-tomcat-2.6.15.jar;E:\Maven\learnDesignPattenRepo\org\apache\tomcat\embed\tomcat-embed-core\9.0.75\tomcat-embed-core-9.0.75.jar;E:\Maven\learnDesignPattenRepo\org\apache\tomcat\embed\tomcat-embed-el\9.0.75\tomcat-embed-el-9.0.75.jar;E:\Maven\learnDesignPattenRepo\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.75\tomcat-embed-websocket-9.0.75.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-web\5.3.27\spring-web-5.3.27.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-beans\5.3.27\spring-beans-5.3.27.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-webmvc\5.3.27\spring-webmvc-5.3.27.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-expression\5.3.27\spring-expression-5.3.27.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-test\2.6.15\spring-boot-test-2.6.15.jar;E:\Maven\learnDesignPattenRepo\junit\junit\4.13.2\junit-4.13.2.jar;E:\Maven\learnDesignPattenRepo\org\hamcrest\hamcrest-core\2.2\hamcrest-core-2.2.jar;E:\Maven\learnDesignPattenRepo\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;E:\Maven\learnDesignPattenRepo\org\apache\commons\commons-lang3\3.13.0\commons-lang3-3.13.0.jar;E:\Maven\learnDesignPattenRepo\com\alibaba\nacos\nacos-spring-context\1.1.1\nacos-spring-context-1.1.1.jar;E:\Maven\learnDesignPattenRepo\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-context\5.3.27\spring-context-5.3.27.jar;E:\Maven\learnDesignPattenRepo\com\alibaba\spring\spring-context-support\1.0.11\spring-context-support-1.0.11.jar;E:\Maven\learnDesignPattenRepo\org\projectlombok\lombok\1.18.30\lombok-1.18.30.jar;E:\Maven\learnDesignPattenRepo\com\alibaba\fastjson\1.2.83\fastjson-1.2.83.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-starter-aop\2.6.15\spring-boot-starter-aop-2.6.15.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-aop\5.3.27\spring-aop-5.3.27.jar;E:\Maven\learnDesignPattenRepo\cglib\cglib\3.1\cglib-3.1.jar;E:\Maven\learnDesignPattenRepo\org\ow2\asm\asm\4.2\asm-4.2.jar;E:\Maven\learnDesignPattenRepo\org\springframework\boot\spring-boot-starter-amqp\2.6.15\spring-boot-starter-amqp-2.6.15.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-messaging\5.3.27\spring-messaging-5.3.27.jar;E:\Maven\learnDesignPattenRepo\org\springframework\amqp\spring-rabbit\2.4.12\spring-rabbit-2.4.12.jar;E:\Maven\learnDesignPattenRepo\org\springframework\amqp\spring-amqp\2.4.12\spring-amqp-2.4.12.jar;E:\Maven\learnDesignPattenRepo\org\springframework\retry\spring-retry\1.3.4\spring-retry-1.3.4.jar;E:\Maven\learnDesignPattenRepo\com\rabbitmq\amqp-client\5.13.1\amqp-client-5.13.1.jar;E:\Maven\learnDesignPattenRepo\org\springframework\spring-tx\5.3.27\spring-tx-5.3.27.jar;E:\Maven\learnDesignPattenRepo\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;E:\Maven\learnDesignPattenRepo\com\alibaba\nacos\nacos-client\2.2.0\nacos-client-2.2.0.jar;E:\Maven\learnDesignPattenRepo\com\alibaba\nacos\nacos-auth-plugin\2.2.0\nacos-auth-plugin-2.2.0.jar;E:\Maven\learnDesignPattenRepo\com\alibaba\nacos\nacos-encryption-plugin\2.2.0\nacos-encryption-plugin-2.2.0.jar;E:\Maven\learnDesignPattenRepo\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;E:\Maven\learnDesignPattenRepo\com\fasterxml\jackson\core\jackson-core\2.13.5\jackson-core-2.13.5.jar;E:\Maven\learnDesignPattenRepo\com\fasterxml\jackson\core\jackson-databind\2.13.5\jackson-databind-2.13.5.jar;E:\Maven\learnDesignPattenRepo\com\fasterxml\jackson\core\jackson-annotations\2.13.5\jackson-annotations-2.13.5.jar;E:\Maven\learnDesignPattenRepo\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;E:\Maven\learnDesignPattenRepo\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;E:\Maven\learnDesignPattenRepo\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;E:\Maven\learnDesignPattenRepo\org\apache\httpcomponents\httpclient\4.5.14\httpclient-4.5.14.jar;E:\Maven\learnDesignPattenRepo\io\prometheus\simpleclient\0.12.0\simpleclient-0.12.0.jar;E:\Maven\learnDesignPattenRepo\io\prometheus\simpleclient_tracer_otel\0.12.0\simpleclient_tracer_otel-0.12.0.jar;E:\Maven\learnDesignPattenRepo\io\prometheus\simpleclient_tracer_common\0.12.0\simpleclient_tracer_common-0.12.0.jar;E:\Maven\learnDesignPattenRepo\io\prometheus\simpleclient_tracer_otel_agent\0.12.0\simpleclient_tracer_otel_agent-0.12.0.jar com.example.demo.learn.pattern.behavior.memento.PatternMain
      16:10:40.045 [main] WARN com.example.demo.learn.pattern.behavior.memento.PatternMain - 存檔中。。。
      16:10:40.173 [main] WARN com.example.demo.learn.pattern.behavior.memento.PatternMain - 1號(hào)存檔已完成。。。
      16:10:40.173 [main] WARN com.example.demo.learn.pattern.behavior.memento.PatternMain (防盜連接:本文首發(fā)自http://www.rzrgm.cn/jilodream/ )- 存檔中。。。
      16:10:40.173 [main] WARN com.example.demo.learn.pattern.behavior.memento.PatternMain - 2號(hào)存檔已完成。。。
      16:10:40.173 [main] WARN com.example.demo.learn.pattern.behavior.memento.PatternMain - 讀檔中。。。
      16:10:40.192 [main] WARN com.example.demo.learn.pattern.behavior.memento.PatternMain - 1號(hào)讀檔已完成。。。
      
      Process finished with exit code 0

      在這個(gè)例子中 MapInfo 擁有了所有內(nèi)部狀態(tài)屬性,但是并不直接暴露出來(lái),我們通過(guò)它的save接口,來(lái)獲取對(duì)象的所有狀態(tài)。

      這個(gè)例子中它負(fù)責(zé)發(fā)起數(shù)據(jù)的保存,充當(dāng)了Originator的角色;
      而RecordSystem類(lèi),負(fù)責(zé)管理和保存?zhèn)渫泴儆赾aretaker角色。
      RecordSystem類(lèi)中的 recordMap,負(fù)責(zé)充當(dāng)備忘錄的角色,也就是保存快照的對(duì)象;

       

      posted @ 2024-09-02 18:50  王若伊_恩賜解脫  閱讀(96)  評(píng)論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 亚洲国产成人久久综合区| 又爽又黄无遮挡高潮视频网站 | 天堂亚洲免费视频| 久久99精品网久久| 日韩精品一区二区三区不卡 | 大地资源高清免费观看| 国产熟睡乱子伦午夜视频| 伊人蕉久影院| 免费无码黄网站在线观看| 少妇真人直播免费视频| 成人拍拍拍无遮挡免费视频| 少妇精品导航| 精品国产粉嫩一区二区三区| 亚洲综合精品第一页| 国产精品一二三中文字幕| 久章草在线毛片视频播放| 无码一级视频在线| 女人喷液抽搐高潮视频| 国产乱人伦无无码视频试看| 久久精品国产最新地址| 亚洲十八禁一区二区三区| 久久精品日日躁夜夜躁| 91亚洲国产三上悠亚在线播放| 91午夜福利一区二区三区| 欧洲成人在线观看| 精品不卡一区二区三区| 久久婷婷大香萑太香蕉AV人| 风流少妇树林打野战视频| 377P欧洲日本亚洲大胆| 欧美人人妻人人澡人人尤物 | 国产成人精品无码免费看| 成人免费ā片在线观看| 东京热tokyo综合久久精品| 午夜通通国产精品福利| 成人免费ā片在线观看| 精品无码久久久久久尤物| 亚洲av成人在线一区| 元朗区| 乱色欧美激惰| 蜜臀av无码一区二区三区| 乱码精品一区二区三区|