{"rsdb":{"rid":"377546","subhead":"","postdate":"0","aid":"264188","fid":"97","uid":"1","topic":"1","content":"
\n

\u5907\u5fd8\u5f55\u6a21\u5f0f\uff08Memento\uff09\uff1a<\/span><\/p> \n

\u3000\u3000\u540e\u6094\u836f\u6765\u5566\uff01\uff01\uff01\u5907\u5fd8\u5f55\u6a21\u5f0f\u5728\u4e0d\u7834\u574f\u5c01\u88c5\u6027\u7684\u524d\u63d0\u4e0b\uff0c\u6355\u83b7\u4e00\u4e2a\u5bf9\u8c61\u7684\u5185\u90e8\u72b6\u6001\uff0c\u5e76\u5728\u8be5\u5bf9\u8c61\u4e4b\u5916\u4fdd\u5b58\u8fd9\u4e2a\u72b6\u6001\uff0c\u4ee5\u4fbf\u5728\u9700\u8981\u65f6\u80fd\u5c06\u8be5\u5bf9\u8c61\u6062\u590d\u5230\u539f\u5148\u4fdd\u5b58\u7684\u72b6\u6001\u3002<\/span><\/p> \n

\u5907\u5fd8\u5f55\u6a21\u5f0f\u7684\u89d2\u8272\uff1a<\/span><\/p> \n

\u3000\u3000\"\"<\/span><\/p> \n

\u3000\u30001\uff09\u53d1\u8d77\u4eba\uff08Originator\uff09\uff1a\u8bb0\u5f55\u5f53\u524d\u65f6\u523b\u7684\u5185\u90e8\u72b6\u6001\u4fe1\u606f\uff0c\u63d0\u4f9b\u521b\u5efa\u5907\u5fd8\u5f55\u548c\u6062\u590d\u5907\u5fd8\u5f55\u6570\u636e\u7684\u529f\u80fd\uff0c\u5b9e\u73b0\u5176\u4ed6\u4e1a\u52a1\u529f\u80fd\uff0c\u5b83\u53ef\u4ee5\u8bbf\u95ee\u5907\u5fd8\u5f55\u91cc\u7684\u6240\u6709\u4fe1\u606f\u3002<\/span><\/p> \n

\u3000\u30002\uff09\u5907\u5fd8\u5f55\uff08Memento\uff09\uff1a\u8d1f\u8d23\u5b58\u50a8\u53d1\u8d77\u4eba\u7684\u5185\u90e8\u72b6\u6001\uff0c\u5728\u9700\u8981\u7684\u65f6\u5019\u63d0\u4f9b\u8fd9\u4e9b\u5185\u90e8\u72b6\u6001\u7ed9\u53d1\u8d77\u4eba\u3002<\/span><\/p> \n

\u3000\u30003\uff09\u7ba1\u7406\u8005\uff08CareTaker\uff09\uff1a\u5bf9\u5907\u5fd8\u5f55\u8fdb\u884c\u7ba1\u7406\uff0c\u63d0\u4f9b\u4fdd\u5b58\u4e0e\u83b7\u53d6\u5907\u5fd8\u5f55\u7684\u529f\u80fd\uff0c\u4f46\u5176\u4e0d\u80fd\u5bf9\u5907\u5fd8\u5f55\u7684\u5185\u5bb9\u8fdb\u884c\u8bbf\u95ee\u4e0e\u4fee\u6539\u3002<\/span><\/p> \n

\u3000\u3000\u6839\u636e\u4e0a\u8ff0UML\u56fe\u5b9e\u73b0\u4ee3\u7801\uff1a<\/span> <\/p> \n

\n
 1<\/span> internal<\/span> class<\/span> Program\r\n<\/span> 2<\/span> {\r\n<\/span> 3<\/span>     private<\/span> static<\/span> void<\/span> Main(string<\/span>[] args)\r\n<\/span> 4<\/span>     {\r\n<\/span> 5<\/span>         Originator o = new<\/span> Originator();\r\n<\/span> 6<\/span>         o.State = "<\/span>On<\/span>"<\/span>;\r\n<\/span> 7<\/span> \r\n 8<\/span>         Caretaker c = new<\/span> Caretaker();\r\n<\/span> 9<\/span>         c.Memento = o.CreateMemento();\r\n<\/span>10<\/span> \r\n11<\/span>         o.State = "<\/span>Off<\/span>"<\/span>;\r\n<\/span>12<\/span>         o.SetMemento(c.Memento);\r\n<\/span>13<\/span>     }\r\n<\/span>14<\/span> }\r\n<\/span>15<\/span> \r\n16<\/span> \/\/\/<\/span> <summary><\/span>\r\n17<\/span> \/\/\/<\/span> \u5907\u5fd8\u5f55\r\n<\/span>18<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n19<\/span> public<\/span> class<\/span> Memento\r\n<\/span>20<\/span> {\r\n<\/span>21<\/span>     private<\/span> string<\/span> _state;\r\n<\/span>22<\/span> \r\n23<\/span>     public<\/span> Memento(string<\/span> state)\r\n<\/span>24<\/span>     {\r\n<\/span>25<\/span>         this<\/span>._state = state;\r\n<\/span>26<\/span>     }\r\n<\/span>27<\/span> \r\n28<\/span>     public<\/span> string<\/span> State\r\n<\/span>29<\/span>     {\r\n<\/span>30<\/span>         get<\/span> { return<\/span> _state; }\r\n<\/span>31<\/span>     }\r\n<\/span>32<\/span> }\r\n<\/span>33<\/span> \r\n34<\/span> \/\/\/<\/span> <summary><\/span>\r\n35<\/span> \/\/\/<\/span> \u53d1\u8d77\u4eba\r\n<\/span>36<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n37<\/span> public<\/span> class<\/span> Originator\r\n<\/span>38<\/span> {\r\n<\/span>39<\/span>     private<\/span> string<\/span> _state;\r\n<\/span>40<\/span> \r\n41<\/span>     public<\/span> string<\/span> State\r\n<\/span>42<\/span>     {\r\n<\/span>43<\/span>         get<\/span>\r\n44<\/span>         {\r\n<\/span>45<\/span>             return<\/span> _state;\r\n<\/span>46<\/span>         }\r\n<\/span>47<\/span>         set<\/span>\r\n48<\/span>         {\r\n<\/span>49<\/span>             _state = value;\r\n<\/span>50<\/span>             Console.WriteLine("<\/span>State = <\/span>"<\/span> + _state);\r\n<\/span>51<\/span>         }\r\n<\/span>52<\/span>     }\r\n<\/span>53<\/span> \r\n54<\/span>     public<\/span> Memento CreateMemento()\r\n<\/span>55<\/span>     {\r\n<\/span>56<\/span>         return<\/span> (new<\/span> Memento(_state));\r\n<\/span>57<\/span>     }\r\n<\/span>58<\/span> \r\n59<\/span>     public<\/span> void<\/span> SetMemento(Memento memento)\r\n<\/span>60<\/span>     {\r\n<\/span>61<\/span>         Console.WriteLine("<\/span>Restoring state...<\/span>"<\/span>);\r\n<\/span>62<\/span>         State = memento.State;\r\n<\/span>63<\/span>     }\r\n<\/span>64<\/span> }\r\n<\/span>65<\/span> \r\n66<\/span> \/\/\/<\/span> <summary><\/span>\r\n67<\/span> \/\/\/<\/span> \u7ba1\u7406\u8005\r\n<\/span>68<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n69<\/span> public<\/span> class<\/span> Caretaker\r\n<\/span>70<\/span> {\r\n<\/span>71<\/span>     private<\/span> Memento _memento;\r\n<\/span>72<\/span> \r\n73<\/span>     public<\/span> Memento Memento\r\n<\/span>74<\/span>     {\r\n<\/span>75<\/span>         get<\/span>\r\n76<\/span>         {\r\n<\/span>77<\/span>             return<\/span> _memento;\r\n<\/span>78<\/span>         }\r\n<\/span>79<\/span>         set<\/span>\r\n80<\/span>         {\r\n<\/span>81<\/span>             _memento = value;\r\n<\/span>82<\/span>         }\r\n<\/span>83<\/span>     }\r\n<\/span>84<\/span> }<\/pre> \n <\/div> \n 

\u3000\u3000\u73b0\u5b9e\u751f\u6d3b\u4e2d\uff0c\u6211\u4eec\u5f80\u5f80\u4f1a\u8fdb\u884c\u6587\u6863\u7684\u5907\u4efd\u6216\u8005SVN\uff0cgit\u7684\u5feb\u7167\u3002<\/span><\/p> \n

\n
  1<\/span> internal<\/span> class<\/span> Program\r\n<\/span>  2<\/span> {\r\n<\/span>  3<\/span>     private<\/span> static<\/span> void<\/span> Main(string<\/span>[] args)\r\n<\/span>  4<\/span>     {\r\n<\/span>  5<\/span>         List<Document> docs = new<\/span> List<Document>()\r\n<\/span>  6<\/span>         {\r\n<\/span>  7<\/span>             new<\/span> Document{ Name="<\/span>\u6c34\u6d52\u4f20<\/span>"<\/span>, Content="<\/span>\u6c34\u6d52\u4f20123131231<\/span>"<\/span>  },\r\n<\/span>  8<\/span>             new<\/span> Document{ Name="<\/span>\u4e09\u56fd\u6f14\u4e49<\/span>"<\/span>, Content="<\/span>\u4e09\u56fd\u6f14\u4e49111111<\/span>"<\/span>  }\r\n<\/span>  9<\/span>         };\r\n<\/span> 10<\/span> \r\n 11<\/span>         Originator originator = new<\/span> Originator(docs);\r\n<\/span> 12<\/span>         Caretaker caretaker = new<\/span> Caretaker();\r\n<\/span> 13<\/span>         DateTimeOffset time1 = new<\/span> DateTimeOffset(DateTime.Now);\r\n<\/span> 14<\/span>         caretaker.MementoDic.Add(time1, originator.CreateMemento());\r\n<\/span> 15<\/span>         originator.GetShow();\r\n<\/span> 16<\/span>         Console.WriteLine("<\/span>====================================<\/span>"<\/span>);\r\n<\/span> 17<\/span>         Console.WriteLine("<\/span>\u4fee\u6539\u5185\u5bb9<\/span>"<\/span>);\r\n<\/span> 18<\/span>         docs[0<\/span>].Content = "<\/span>\u65b0\u6c34\u6d52\uff0c\u641e\u7b11ing<\/span>"<\/span>;\r\n<\/span> 19<\/span>         DateTimeOffset time2 = new<\/span> DateTimeOffset(DateTime.Now);\r\n<\/span> 20<\/span>         caretaker.MementoDic.Add(time2, originator.CreateMemento());\r\n<\/span> 21<\/span>         originator.GetShow();\r\n<\/span> 22<\/span>         Console.WriteLine("<\/span>====================================<\/span>"<\/span>);\r\n<\/span> 23<\/span>         Console.WriteLine("<\/span>\u56de\u6eda\u5230\u7b2c\u4e00\u9636\u6bb5<\/span>"<\/span>);\r\n<\/span> 24<\/span>         originator.SetMemento(caretaker.MementoDic[time1]);\r\n<\/span> 25<\/span>         originator.GetShow();\r\n<\/span> 26<\/span>         Console.WriteLine("<\/span>\u56de\u6eda\u5230\u7b2c\u4e8c\u9636\u6bb5<\/span>"<\/span>);\r\n<\/span> 27<\/span>         originator.SetMemento(caretaker.MementoDic[time2]);\r\n<\/span> 28<\/span>         originator.GetShow();\r\n<\/span> 29<\/span>     }\r\n<\/span> 30<\/span> }\r\n<\/span> 31<\/span> \r\n 32<\/span> \/\/\/<\/span> <summary><\/span>\r\n 33<\/span> \/\/\/<\/span> \u6587\u4ef6\r\n<\/span> 34<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n 35<\/span> public<\/span> class<\/span> Document\r\n<\/span> 36<\/span> {\r\n<\/span> 37<\/span>     public<\/span> string<\/span> Name { get<\/span>; set<\/span>; }\r\n<\/span> 38<\/span>     public<\/span> string<\/span> Content { get<\/span>; set<\/span>; }\r\n<\/span> 39<\/span> }\r\n<\/span> 40<\/span> \r\n 41<\/span> \/\/\/<\/span> <summary><\/span>\r\n 42<\/span> \/\/\/<\/span> \u5907\u5fd8\u5f55\r\n<\/span> 43<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n 44<\/span> public<\/span> class<\/span> Memento\r\n<\/span> 45<\/span> {\r\n<\/span> 46<\/span>     public<\/span> List<Document> fileBack;\r\n<\/span> 47<\/span> \r\n 48<\/span>     public<\/span> Memento(List<Document> docs)\r\n<\/span> 49<\/span>     {","orderid":"0","title":"\u8bbe\u8ba1\u6a21\u5f0f-\u884c\u4e3a\u578b-\u5907\u5fd8\u5f55\u6a21\u5f0f(\u4e00)","smalltitle":"","mid":"0","fname":"\u5206\u6790\u8bbe\u8ba1","special_id":"0","bak_id":"0","info":"0","hits":"357","pages":"2","comments":"0","posttime":"2019-10-10 18:14:56","list":"1570702496","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"\u8bbe\u8ba1\u6a21\u5f0f<\/A> \u884c\u4e3a<\/A> \u5907\u5fd8\u5f55<\/A> \u6a21\u5f0f<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"14.17.22.37","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"\u8bbe\u8ba1\u6a21\u5f0f-\u884c\u4e3a\u578b-\u5907\u5fd8\u5f55\u6a21\u5f0f","lastview":"1714909662","digg_num":"0","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}