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

\u8bbf\u95ee\u8005\u6a21\u5f0f\uff08Vistor\uff09\uff1a<\/span><\/p> \n

\u3000\u3000\u8bbf\u95ee\u8005\u6a21\u5f0f\u7684\u5b98\u65b9\u5b9a\u4e49\u662f\u8fd9\u6837\u7684\uff1a\u8868\u793a\u4e00\u4e2a\u4f5c\u7528\u4e8e\u67d0\u5bf9\u8c61\u7ed3\u6784\u4e2d\u7684\u5404\u5143\u7d20\u7684\u64cd\u4f5c\uff0c\u5b83\u4f7f\u4f60\u53ef\u4ee5\u5728\u4e0d\u6539\u53d8\u5404\u5143\u7d20\u7c7b\u7684\u524d\u63d0\u4e0b\u5b9a\u4e49\u4f5c\u7528\u4e8e\u8fd9\u4e9b\u5143\u7d20\u7684\u65b0\u64cd\u4f5c\u3002\u5b98\u65b9\u7684\u4e1c\u897f\u603b\u662f\u6666\u6da9\u96be\u61c2\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u73b0\u5728\u5c31\u6765\u62c6\u89e3\u4e00\u4e0b\uff1a<\/span>\u9996\u5148"\u4e00\u4e2a\u4f5c\u7528\u4e8e\u67d0\u5bf9\u8c61\u7ed3\u6784\u4e2d\u7684\u5404\u5143\u7d20\u7684\u64cd\u4f5c"\uff0c\u63d0\u5230\u4e86\u4e09\u4e2a\u4e1c\u897f\uff1a\u5bf9\u8c61\u7ed3\u6784\u3001\u5143\u7d20\u3001\u64cd\u4f5c\u3002\u6211\u4eec\u90fd\u5b66\u4e60\u8fc7\u6570\u636e\u7ed3\u6784\uff0c\u6570\u636e\u7ed3\u6784\u4e2d\u5927\u5bb6\u5bf9\u6570\u636e\u7684\u8bbf\u95ee\u4e00\u822c\u90fd\u662f\u76f4\u63a5\u8bbf\u95ee\u5176\u5730\u5740\u3002\u5728\u9762\u5411\u5bf9\u8c61\u7684\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u4e5f\u662f\u5c06\u6570\u636e\u7684\u8bbf\u95ee\u64cd\u4f5c\u653e\u5728\u7c7b\u7684\u5185\u90e8\uff0c\u4fbf\u4e8e\u8bbf\u95ee\u3002\u8fd9\u79cd\u8bbe\u8ba1\u770b\u4f3c\u6ca1\u6709\u4ec0\u4e48\u95ee\u9898\uff0c\u4f46\u5f53\u6211\u4eec\u60f3\u8981\u91c7\u7528\u4e0d\u540c\u65b9\u5f0f\u8bbf\u95ee\u6570\u636e\u6216\u5bf9\u8c61\u7ed3\u6784\u65f6\u5c31\u5fc5\u987b\u8981\u5bf9\u7c7b\u8fdb\u884c\u4fee\u6539\uff0c\u8fd9\u6837\u5c31\u8fdd\u53cd\u4e86OCP\u539f\u5219<\/a>\u3002\u4e8e\u662f\u5927\u5bb6\u4f1a\u60f3\u5230\u5c06\u6570\u636e\u7ed3\u6784\u4e0e\u64cd\u4f5c\u5206\u79bb\u5f00\u6765\uff0c\u5f53\u95ee\u4eec\u9700\u8981\u6dfb\u52a0\u8bbf\u95ee\u64cd\u4f5c\u7684\u65f6\u5019\u76f4\u63a5\u6dfb\u52a0\u65b0\u7684\u7c7b\uff0c\u539f\u6765\u7684\u4ee3\u7801\u4e0d\u9700\u8981\u505a\u4efb\u4f55\u6539\u53d8\uff0c\u8fd9\u4e5f\u662f\u540e\u534a\u53e5\u63d0\u5230\u7684"\u53ef\u4ee5\u5728\u4e0d\u6539\u53d8\u5404\u5143\u7d20\u7c7b\u7684\u524d\u63d0\u4e0b\u5b9a\u4e49\u4f5c\u7528\u4e8e\u8fd9\u4e9b\u5143\u7d20\u7684\u65b0\u64cd\u4f5c"\u3002<\/span><\/p> \n

\u8bbf\u95ee\u8005\u6a21\u5f0f\u7684\u89d2\u8272\uff1a<\/span><\/p> \n

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

\u3000\u30001\uff09Visitor\uff1a\u63a5\u53e3\u6216\u62bd\u8c61\u7c7b\uff0c\u5b9a\u4e49\u4e86\u5bf9\u6bcf\u4e2aElement\u8bbf\u95ee\u7684\u884c\u4e3a\uff0c\u5b83\u7684\u53c2\u6570\u5c31\u662f\u88ab\u8bbf\u95ee\u7684\u5143\u7d20\uff0c\u5b83\u7684\u65b9\u6cd5\u4e2a\u6570\u7406\u8bba\u4e0a\u4e0e\u5143\u7d20\u7684\u4e2a\u6570\u662f\u4e00\u6837\u7684\uff0c\u56e0\u6b64\uff0c\u8bbf\u95ee\u8005\u6a21\u5f0f\u8981\u6c42\u5143\u7d20\u7684\u7c7b\u578b\u8981\u7a33\u5b9a\uff0c\u5982\u679c\u7ecf\u5e38\u6dfb\u52a0\u3001\u79fb\u9664\u5143\u7d20\u7c7b\uff0c\u5fc5\u7136\u4f1a\u5bfc\u81f4\u9891\u7e41\u5730\u4fee\u6539visitor\u63a5\u53e3\uff0c\u5982\u679c\u51fa\u73b0\u8fd9\u79cd\u60c5\u51b5\uff0c\u5219\u8bf4\u660e\u4e0d\u9002\u5408\u4f7f\u7528\u8be5\u6a21\u5f0f\u3002<\/span><\/p> \n

\u3000\u30002\uff09ConcreteVisitor\uff1a\u5177\u4f53\u7684\u8bbf\u95ee\u8005\uff0c\u5b83\u9700\u8981\u7ed9\u51fa\u5bf9\u6bcf\u4e00\u4e2a\u5143\u7d20\u7c7b\u8bbf\u95ee\u65f6\u6240\u4ea7\u751f\u7684\u5177\u4f53\u884c\u4e3a\u3002<\/span><\/p> \n

\u3000\u30003\uff09Element\uff1a\u5143\u7d20\u63a5\u53e3\u6216\u62bd\u8c61\u7c7b\uff0c\u5b83\u5b9a\u4e49\u4e86\u4e00\u4e2a\u63a5\u53d7\u8bbf\u95ee\u8005\u7684\u65b9\u6cd5\uff08accept\uff09\uff0c\u5176\u610f\u601d\u5c31\u662f\u8bf4\u6bcf\u4e00\u4e2a\u5143\u7d20\u90fd\u53ef\u4ee5\u88ab\u8bbf\u95ee\u8005\u8bbf\u95ee\u3002<\/span><\/p> \n

\u3000\u30004\uff09ConcreteElement\uff1a\u5177\u4f53\u7684\u5143\u7d20\u7c7b\uff0c\u5b83\u63d0\u4f9b\u63a5\u53d7\u8bbf\u95ee\u7684\u5177\u4f53\u5b9e\u73b0\uff0c\u800c\u8fd9\u4e2a\u5177\u4f53\u5b9e\u73b0\u901a\u5e38\u60c5\u51b5\u4e0b\u662f\u4f7f\u7528\u8bbf\u95ee\u8005\u63d0\u4f9b\u7684\u8bbf\u95ee\u8be5\u5143\u7d20\u7c7b\u7684\u65b9\u6cd5\u3002<\/span><\/p> \n

\u3000\u30005\uff09ObjectStructure\uff1a\u5b9a\u4e49\u5f53\u4e2d\u6240\u63d0\u5230\u7684\u5bf9\u8c61\u7ed3\u6784\uff0c\u5bf9\u8c61\u7ed3\u6784\u662f\u4e00\u4e2a\u62bd\u8c61\u8868\u8ff0\uff0c\u5b83\u5185\u90e8\u7ba1\u7406\u4e86\u5143\u7d20\u96c6\u5408\uff0c\u5e76\u4e14\u53ef\u4ee5\u8fed\u4ee3\u8fd9\u4e9b\u5143\u7d20\u63d0\u4f9b\u8bbf\u95ee\u8005\u8bbf\u95ee\u3002<\/span><\/p> \n

\u793a\u4f8b\uff1a<\/span><\/p> \n

\u3000\u3000\u4e00\u4e2a\u76ee\u5f55\u4e0b\u9762\u6709\u6587\u4ef6\u5939\u548c\u6587\u4ef6\uff0c\u6587\u4ef6\u5939\u548c\u6587\u4ef6\u662f\u5177\u4f53\u7684\u5143\u7d20\u7c7b\u3002<\/span> <\/p> \n

\n
 1<\/span> \/\/\/<\/span> <summary><\/span>\r\n 2<\/span> \/\/\/<\/span> \u62bd\u8c61\u8bbf\u95ee\u8005\r\n<\/span> 3<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n 4<\/span> public<\/span> abstract<\/span> class<\/span> Visitor\r\n<\/span> 5<\/span> {\r\n<\/span> 6<\/span>     public<\/span> abstract<\/span> void<\/span> visit(File file);\r\n<\/span> 7<\/span> \r\n 8<\/span>     public<\/span> abstract<\/span> void<\/span> visit(Directory directory);\r\n<\/span> 9<\/span> }\r\n<\/span>10<\/span> \r\n11<\/span> \/\/\/<\/span> <summary><\/span>\r\n12<\/span> \/\/\/<\/span> \u5177\u4f53\u7684\u8bbf\u95ee\u8005\r\n<\/span>13<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n14<\/span> public<\/span> class<\/span> ListVisitor : Visitor\r\n<\/span>15<\/span> {\r\n<\/span>16<\/span>     public<\/span> override<\/span> void<\/span> visit(File file)\r\n<\/span>17<\/span>     {\r\n<\/span>18<\/span>         Console.WriteLine($"<\/span>\u6587\u4ef6\u540d\u79f0{file.GetName()}<\/span>"<\/span>);\r\n<\/span>19<\/span>     }\r\n<\/span>20<\/span> \r\n21<\/span>     public<\/span> override<\/span> void<\/span> visit(Directory directory)\r\n<\/span>22<\/span>     {\r\n<\/span>23<\/span>         Console.WriteLine($"<\/span>\u6587\u4ef6\u5939\u540d\u79f0{directory.GetName()}<\/span>"<\/span>);\r\n<\/span>24<\/span>     }\r\n<\/span>25<\/span> }\r\n<\/span>26<\/span> \r\n27<\/span> \/\/\/<\/span> <summary><\/span>\r\n28<\/span> \/\/\/<\/span> \u5143\u7d20\u62bd\u8c61\u7c7b\r\n<\/span>29<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n30<\/span> public<\/span> abstract<\/span> class<\/span> Element\r\n<\/span>31<\/span> {\r\n<\/span>32<\/span>     public<\/span> abstract<\/span> void<\/span> accept(Visitor visitor);\r\n<\/span>33<\/span> }\r\n<\/span>34<\/span> \r\n35<\/span> public<\/span> class<\/span> Entry : Element\r\n<\/span>36<\/span> {\r\n<\/span>37<\/span>     private<\/span> string<\/span> name;\r\n<\/span>38<\/span> \r\n39<\/span>     public<\/span> Entry(string<\/span> name)\r\n<\/span>40<\/span>     {\r\n<\/span>41<\/span>         this<\/span>.name = name;\r\n<\/span>42<\/span>     }\r\n<\/span>43<\/span> \r\n44<\/span>     public<\/span> string<\/span> GetName()\r\n<\/span>45<\/span>     {\r\n<\/span>46<\/span>         return<\/span> this<\/span>.name;\r\n<\/span>47<\/span>     }\r\n<\/span>48<\/span> \r\n49<\/span>     public<\/span> override<\/span> void<\/span> accept(Visitor visitor)\r\n<\/span>50<\/span>     {\r\n<\/span>51<\/span>         throw<\/span> new<\/span> NotImplementedException();\r\n<\/span>52<\/span>     }\r\n<\/span>53<\/span> }\r\n<\/span>54<\/span> \r\n55<\/span> \/\/\/<\/span> <summary><\/span>\r\n56<\/span> \/\/\/<\/span> \u5177\u4f53\u7684\u5143\u7d20\u7c7b\uff1a\u6587\u4ef6\u5939\r\n<\/span>57<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n58<\/span> public<\/span> class<\/span> Directory : Entry\r\n<\/span>59<\/span> {\r\n<\/span>60<\/span>     public<\/span> Directory(string<\/span> name)\r\n<\/span>61<\/span>         : base<\/span>(name)\r\n<\/span>62<\/span>     {\r\n<\/span>63<\/span>     }\r\n<\/span>64<\/span> \r\n65<\/span>     public<\/span> override<\/span> void<\/span> accept(Visitor visitor)\r\n<\/span>66<\/span>     {\r\n<\/span>67<\/span>         visitor.visit(this<\/span>);\r\n<\/span>68<\/span>     }\r\n<\/span>69<\/span> }\r\n<\/span>70<\/span> \r\n71<\/span> \/\/\/<\/span> <summary><\/span>\r\n72<\/span> \/\/\/<\/span> \u5177\u4f53\u7684\u5143\u7d20\u7c7b\uff1a\u6587\u4ef6\r\n<\/span>73<\/span> \/\/\/<\/span> <\/summary><\/span>\r\n74<\/span> public<\/span> class<\/span> File : Entry\r\n<\/span>75<\/span> {\r\n<\/span>76<\/span>     public<\/span> File(string<\/span> name)\r\n<\/span>77<\/span>         : base<\/span>(name)\r\n<\/span>78<\/span>     {\r\n<\/span>79<\/span>     }\r\n<\/span>80<\/span> \r\n81<\/span>     public<\/span> override<\/span> void<\/span> accept(Visitor visitor)\r\n<\/span>82<\/span>     {\r\n<\/span>83<\/span>         visitor.visit(this<\/span>);\r\n<\/span>84<\/span>     }\r\n<\/span>85<\/span> }<\/pre> \n <\/div> \n 

\u3000\u3000\u5b9a\u4e49\u597d\u4e86\uff0c\u6570\u636e\u64cd\u4f5c\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5b9a\u4e49\u6570\u636e\u7ed3\u6784\u7684\u6838\u5fc3\u7c7bObjectStructure\u3002<\/span><\/p> \n

\n
 1<\/span> public<\/span> class<\/span> ObjectStructure\r\n<\/span> 2<\/span> {\r\n<\/span> 3<\/span>     private<\/span> readonly<\/span> Visitor visitor;\r\n<\/span> 4<\/span>     private<\/span> List<Element> list = new<\/span> List<Element>();\r\n<\/span> 5<\/span> \r\n 6<\/span>     public<\/span> ObjectStructure(Visitor visitor)\r\n<\/span> 7<\/span>     {\r\n<\/span> 8<\/span>         this<\/span>.visitor = visitor;\r\n<\/span> 9<\/span>     }\r\n<\/span>10<\/span> \r\n11<\/span>     public<\/span> void<\/span> Add(Element element)\r\n<\/span>12<\/span>     {\r\n<\/span>13<\/span>         list.Add(element);\r\n<\/span>14<\/span>     }\r\n<\/span>15<\/span> \r\n16<\/span>     public<\/span> void<\/span> Show()\r\n<\/span>17<\/span>     {\r\n<\/span>18<\/span>         foreach<\/span> (Element element in<\/span> list)\r\n<\/span>19<\/span>         {\r\n<\/span>20<\/span>             element.accept(visitor);\r\n<\/span>21<\/span>         }\r\n<\/span>22<\/span>     }\r\n<\/span>23<\/span> }<\/pre> \n <\/div> \n 

\u3000\u3000\u5ba2\u6237\u7aef\u8c03\u7528\u3002<\/span><\/p> \n

\n
 1<\/span> private<\/span> static<\/span> void<\/span> Main(string<\/span>[] args)\r\n<\/span> 2<\/span> {\r\n<\/span> 3<\/span>     ObjectStructure objectStructure = new<\/span> ObjectStructure(new<\/span> ListVisitor());\r\n<\/span> 4<\/span>     objectStructure.Add(new<\/span> Directory("<\/span>\u6211\u7684\u6587\u4ef6\u5939<\/span>"<\/span>));\r\n<\/span> 5<\/span>     objectStructure.Add(new<\/span> File("<\/span>C#\u9ad8\u7ea7\u7f16\u7a0b.pdf<\/span>"<\/span>));\r\n<\/span> 6<\/span>     objectStructure.Add(new<\/span> File("<\/span>\u8bbe\u8ba1\u6a21\u5f0f.pdf<\/span>"<\/span>));\r\n<\/span> 7<\/span>     objectStructure.Add(new<\/span> File(","orderid":"0","title":"\u8bbe\u8ba1\u6a21\u5f0f-\u884c\u4e3a\u578b-\u8bbf\u95ee\u8005\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 11:17:43","list":"1570677463","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> \u8bbf\u95ee\u8005<\/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-\u8bbf\u95ee\u8005\u6a21\u5f0f","lastview":"1714639576","digg_num":"0","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}