\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 \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 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
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>