{"rsdb":{"rid":"301058","subhead":"","postdate":"0","aid":"216411","fid":"78","uid":"1","topic":"1","content":"
\n

Golang\u8bbe\u8ba1\u6a21\u5f0f\u2014\u2014\u7b80\u5355\u5de5\u5382\u6a21\u5f0f<\/h1> \n

\u80cc\u666f<\/strong><\/p> \n

\u5047\u8bbe\u6211\u4eec\u5728\u505a\u4e00\u6b3e\u5c0f\u578b\u7ffb\u8bd1\u8f6f\u4ef6\uff0c\u8f6f\u4ef6\u53ef\u4ee5\u5c06\u5fb7\u8bed\u3001\u82f1\u8bed\u3001\u65e5\u8bed\u90fd\u7ffb\u8bd1\u6210\u76ee\u6807\u4e2d\u6587\uff0c\u5e76\u663e\u793a\u5728\u524d\u7aef\u3002<\/p> \n

\u601d\u8def<\/strong><\/p> \n

\u6211\u4eec\u4f1a\u6709\u4e09\u4e2a\u5177\u4f53\u7684\u8bed\u8a00\u7ffb\u8bd1\u7ed3\u6784\u4f53\uff0c\u6216\u8bb8\u4ee5\u540e\u8fd8\u6709\u66f4\u591a\uff0c\u4f46\u73b0\u5728\u5206\u522b\u662fGermanTranslater\u3001EnglishTranslater\u3001JapaneseTranslater\uff0c\u4ed6\u4eec\u90fd\u5171\u540c\u5b9e\u73b0\u4e86\u4e00\u4e2a\u63a5\u53e3Translator\u3002<\/p> \n

\/\/\u7ffb\u8bd1\u63a5\u53e3\ntype Translator interface {\n    Translate(string) string\n}<\/code><\/pre> \n 
\/\/\u5fb7\u8bed\u7ffb\u8bd1\u7c7b\ntype GermanTranslator struct{}\n\nfunc (*GermanTranslator) Translate(words string) string {\n\n    return "\u5fb7\u8bed"\n}<\/code><\/pre> \n 
\/\/\u82f1\u8bed\u7ffb\u8bd1\u7c7b\ntype EnglishTranslator struct{}\n\nfunc (*EnglishTranslator) Translate(words string) string {\n\n    return "\u82f1\u8bed"\n}<\/code><\/pre> \n 
\/\/\u65e5\u8bed\u7ffb\u8bd1\u7c7b\ntype JapaneseTranslator struct{}\n\nfunc (*JapaneseTranslator) Translate(words string) string {\n\n    return "\u65e5\u8bed"\n}<\/code><\/pre> \n 

\u63a5\u4e0b\u6765\u5728\u7a0b\u5e8f\u5165\u53e3\u83b7\u53d6\u7528\u6237\u8f93\u5165\u7684\u6587\u672c\uff0c\u5e76\u5c06\u5176\u7ffb\u8bd1<\/p> \n

package main\n\nimport (\n    "fmt"\n    "time"\n)\n\nfunc main() {\n    defer func() {\n        if err := recover(); err != nil {\n            fmt.Println(err)\n        }\n        time.Sleep(3 * time.Second)\n    }()\n\n    var lan int\n    fmt.Printf("%s\\r\\n%s\\r\\n", "\u4ee5\u4e0b\u662f\u53ef\u7ffb\u8bd1\u7684\u8bed\u8a00\u79cd\u7c7b\uff0c\u8bf7\u8f93\u5165\u4ee3\u8868\u6570\u5b57", "1\uff1a\u5fb7\u8bed\u30012\uff1a\u82f1\u8bed\u30013\uff1a\u65e5\u8bed")\n    fmt.Scanln(&lan)\n\n    fmt.Println("\u8bf7\u8f93\u5165\u8981\u7ffb\u8bd1\u6210\u4e2d\u6587\u7684\u6587\u672c\uff1a")\n    var inputWords string\n    fmt.Scanln(&inputWords)\n\n    var translator Translator\n\n    \/\/\u6839\u636e\u4e0d\u540c\u7684\u8bed\u8a00\u79cd\u7c7b\uff0c\u5b9e\u4f8b\u5316\u4e0d\u540c\u7684\u7ffb\u8bd1\u7c7b\n    switch lan {\n    case 1:\n        translator = new(GermanTranslator)\n    case 2:\n        translator = new(EnglishTranslator)\n    case 3:\n        translator = new(JapaneseTranslator)\n    default:\n        panic("no such translator")\n    }\n\n    fmt.Println(translator.Translate(inputWords))\n}<\/code><\/pre> \n 

\u8fd0\u884c\u7ed3\u679c<\/strong><\/p> \n

\"\u8fd0\u884c\u7ed3\u679c\"<\/p> \n

\u7f3a\u70b9<\/strong><\/p> \n

    \n
  1. \u8fdd\u80cc\u4e86\u5f00\u95ed\u539f\u5219\uff0c\u4ee5\u540e\u8fd8\u53ef\u80fd\u6709\u6cd5\u8bed\u3001\u4fc4\u8bed\u3001\u963f\u62c9\u4f2f\u8bed\u7b49\u5176\u4ed6\u7ffb\u8bd1\u5668\uff0c\u6bcf\u4e00\u6b21\u6dfb\u52a0\u7ffb\u8bd1\u5668\u90fd\u8981\u5728\u5ba2\u6237\u7aef\u4ee3\u7801\u589e\u52a0\u5bf9\u5e94\u7684switch\u5206\u652f\uff0c\u7ef4\u62a4\u6210\u672c\u9ad8\u3002\u5018\u82e5\u8fd8\u6709\u4e0d\u6b62\u4e00\u5904\u8c03\u7528\u4e86\u521b\u5efa\u903b\u8f91\uff0c\u8fd8\u8981\u7ef4\u62a4\u591a\u5904\u4ee3\u7801\u3002<\/li> \n
  2. \u8fdd\u80cc\u4e86\u5355\u4e00\u804c\u8d23\u539f\u5219\uff0c\u5ba2\u6237\u7aef\u5904\u7406\u7c7b\u7684\u804c\u8d23\u5e94\u8be5\u53ea\u662f\u8d1f\u8d23\u63a5\u6536\u7528\u6237\u7684\u8f93\u5165\u5e76\u5c06\u5176\u6253\u5370\uff0c\u73b0\u5728\u8fd8\u8d1f\u8d23\u7ffb\u8bd1\u7c7b\u7684\u521b\u5efa\u903b\u8f91\uff0c\u5bfc\u81f4\u8fd9\u4e2a\u7c7b\u7684\u804c\u8d23\u8fc7\u591a\u3002<\/li> \n <\/ol> \n

    \u6539\u5584<\/strong><\/p> \n

    \u4e3a\u4e86\u89e3\u51b3\u6bcf\u6b21\u65b0\u589e\u7ffb\u8bd1\u7c7b\u90fd\u8981\u4fee\u6539\u5ba2\u6237\u7aef\u7684\u95ee\u9898\uff0c\u6211\u4eec\u5f15\u5165\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u8bbe\u8ba1\u539f\u5219\uff0c\u53ef\u4ee5\u8bf4\u6bcf\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u90fd\u9075\u5faa\u7740\u8fd9\u4e2a\u8bbe\u8ba1\u539f\u5219\u3002<\/p> \n

    \u8bbe\u8ba1\u539f\u5219\uff1a<\/strong>\u627e\u51fa\u7528\u4e2d\u53ef\u80fd\u9700\u8981\u53d8\u5316\u4e4b\u5904\uff0c\u5e76\u628a\u5b83\u4eec\u72ec\u7acb\u51fa\u6765\uff0c\u4e0d\u8981\u548c\u90a3\u4e9b\u4e0d\u9700\u8981\u53d8\u5316\u7684\u4ee3\u7801\u6df7\u5728\u4e00\u8d77\u3002<\/p> \n

    \u8fd9\u6837\u7684\u8bdd\uff0c\u6bcf\u6b21\u5f53\u65b0\u7684\u9700\u6c42\u6765\u4e34\uff0c\u6211\u4eec\u53ea\u4f1a\u6539\u52a8\u5230\u90a3\u4e9b\u9700\u8981\u53d8\u5316\u7684\u5730\u65b9\uff0c\u800c\u4e0d\u53d8\u7684\u5730\u65b9\u5c31\u4e0d\u4f1a\u88ab\u6539\u52a8\u5f71\u54cd\u5230\u3002<\/p> \n

    \u663e\u7136\uff0c\u7ffb\u8bd1\u5e94\u7528\u4e2d\u5bb9\u6613\u53d8\u5316\u7684\u5730\u65b9\u662f\u751f\u6210\u7ffb\u8bd1\u7c7b\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u6211\u4eec\u628a\u8fd9\u90e8\u5206\u804c\u8d23\u62bd\u51fa\u6765\uff0c\u628a\u5b83\u4ea4\u7ed9\u53e6\u5916\u4e00\u4e2a\u7c7b\u53bb\u505a\uff08\u4e00\u822c\u662f\u4e00\u4e2a\u9759\u6001\u65b9\u6cd5\uff09\uff0c\u8fd9\u4e2a\u7c7b\u5c31\u53eb\u7ffb\u8bd1\u5de5\u5382\u3002\u800c\u5ba2\u6237\u7aef\u518d\u9700\u8981\u751f\u6210\u7ffb\u8bd1\u7c7b\u5b9e\u4f8b\u65f6\uff0c\u4ec5\u9700\u8c03\u7528\u7ffb\u8bd1\u5de5\u5382\u63d0\u4f9b\u7684\u65b9\u6cd5\u5373\u53ef\u3002\u5c31\u7b97\u4ee5\u540e\u7ffb\u8bd1\u5de5\u5382\u4f1a\u63d0\u4f9b\u66f4\u591a\u7684\u7ffb\u8bd1\u7c7b\uff0c\u4e5f\u4e0d\u4f1a\u4fee\u6539\u5230\u5ba2\u6237\u7aef\u7684\u4ee3\u7801\uff0c\u56e0\u6b64\u4e5f\u5c31\u6709\u4e86\u6211\u4eec\u7684\u73b0\u5728\u7684\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u3002<\/p> \n

    \u7b80\u5355\u5de5\u5382\u6a21\u5f0f(Simple Factory Pattern)<\/strong><\/p> \n

    \u53c8\u79f0\u4e3a\u9759\u6001\u5de5\u5382\u65b9\u6cd5(Static Factory Method)\u6a21\u5f0f\uff0c\u5b83\u5c5e\u4e8e\u7c7b\u521b\u5efa\u578b\u6a21\u5f0f\u3002\u5728\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u4e2d\uff0c\u53ef\u4ee5\u6839\u636e\u53c2\u6570\u7684\u4e0d\u540c\u8fd4\u56de\u4e0d\u540c\u7c7b\u7684\u5b9e\u4f8b\u3002\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u4e13\u95e8\u5b9a\u4e49\u4e00\u4e2a\u7c7b\u6765\u8d1f\u8d23\u521b\u5efa\u5176\u4ed6\u7c7b\u7684\u5b9e\u4f8b\uff0c\u88ab\u521b\u5efa\u7684\u5b9e\u4f8b\u901a\u5e38\u90fd\u5177\u6709\u5171\u540c\u7684\u7236\u7c7b\u3002<\/p> \n

    UML\u7c7b\u56fe<\/strong><\/p> \n

    \"UML\u7c7b\u56fe\"<\/p> \n

    \u4e8e\u662f\u6211\u4eec\u6839\u636e\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u518d\u5b8c\u5584\u4e4b\u524d\u7684\u4ee3\u7801\uff0c\u5982\u4e0b\u6240\u793a\u3002<\/p> \n

    \u5de5\u5382\u4ee3\u7801<\/strong><\/p> \n

    func Create(lan int) Translator {\n    var translator Translator\n\n    \/\/\u6839\u636e\u4e0d\u540c\u7684\u8bed\u8a00\u79cd\u7c7b\uff0c\u5b9e\u4f8b\u5316\u4e0d\u540c\u7684\u7ffb\u8bd1\u7c7b\n    switch lan {\n    case 1:\n        translator = new(GermanTranslator)\n    case 2:\n        translator = new(EnglishTranslator)\n    case 3:\n        translator = new(JapaneseTranslator)\n    default:\n        panic("no such translator")\n    }\n\n    return translator\n}<\/code><\/pre> \n 

    \u5ba2\u6237\u7aef\u4ee3\u7801<\/strong><\/p> \n

    func main() {\n    defer func() {\n        if err := recover(); err != nil {\n            fmt.Println(err)\n        }\n        time.Sleep(3 * time.Second)\n    }()\n\n    var lan int\n    fmt.Printf("%s\\r\\n%s\\r\\n", "\u4ee5\u4e0b\u662f\u53ef\u7ffb\u8bd1\u7684\u8bed\u8a00\u79cd\u7c7b\uff0c\u8bf7\u8f93\u5165\u4ee3\u8868\u6570\u5b57", "1\uff1a\u5fb7\u8bed\u30012\uff1a\u82f1\u8bed\u30013\uff1a\u65e5\u8bed")\n    fmt.Scanln(&lan)\n\n    fmt.Println("\u8bf7\u8f93\u5165\u8981\u7ffb\u8bd1\u6210\u4e2d\u6587\u7684\u6587\u672c\uff1a")\n    var inputWords string\n    fmt.Scanln(&inputWords)\n\n    \/\/\u5ba2\u6237\u7aef\u53ea\u5173\u6ce8\u5982\u4f55\u83b7\u53d6\u7ffb\u8bd1\u7c7b\uff0c\u800c\u4e0d\u7528\u5173\u6ce8\u521b\u5efa\u7ffb\u8bd1\u7c7b\u7684\u7ec6\u8282\n    translator:=CreateTranslator(lan)\n\n    fmt.Println(translator.Translate(inputWords))\n}<\/code><\/pre> \n 

    \u4f18\u70b9<\/strong><\/p> \n

      \n
    1. \u5c06\u5ba2\u6237\u7aef\u548c\u521b\u5efa\u4ea7\u54c1\u5b9e\u4f8b\u89e3\u8026\u5f00\u6765\uff0c\u4f7f\u5ba2\u6237\u7aef\u53ea\u9700\u8981\u5173\u6ce8\u5982\u4f55\u83b7\u53d6\u5b9e\u4f8b\u3002<\/li> \n
    2. \u7b26\u5408\u5355\u4e00\u804c\u8d23\u3002<\/li> \n <\/ol> \n

      \u7f3a\u70b9<\/strong><\/p> \n

        \n
      1. \u589e\u52a0\u65b0\u7ffb\u8bd1\u7c7b\u65f6\u8fd8\u662f\u9700\u8981\u6539\u52a8\u5de5\u5382\u7c7b\uff0c\u6ca1\u6709\u7b26\u5408\u5f00\u95ed\u539f\u5219\u3002<\/li> \n <\/ol> \n

        \u5e94\u7528\u573a\u666f<\/strong><\/p> \n

        \u5f53\u5728\u4ee3\u7801\u91cc\u770b\u5230switch\u7684\u65f6\u5019\uff0c\u5c31\u5e94\u8be5\u601d\u8003\u662f\u5426\u7528\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u3002<\/p> \n

        \u4f5c\u8005\uff1a\u80e1\u91d1\u751f
        \u51fa\u5904\uff1awww.aprilboy.com
        \u7248\u6743\u6240\u6709\uff0c\u6b22\u8fce\u4fdd\u7559\u539f\u6587\u94fe\u63a5\u8fdb\u884c\u8f6c\u8f7d\uff1a)<\/p> \n<\/div>","orderid":"0","title":"Golang\u8bbe\u8ba1\u6a21\u5f0f\u2014\u7b80\u5355\u5de5\u5382\u6a21\u5f0f(Simple Factory Pattern)","smalltitle":"","mid":"0","fname":"GO","special_id":"0","bak_id":"0","info":"0","hits":"155","pages":"1","comments":"0","posttime":"2019-03-29 18:07:53","list":"1553854073","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"http:\/\/www.aprilboy.com\/wp-content\/uploads\/2019\/03\/translator.jpg","ispic":"1","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"Golang<\/A> \u8bbe\u8ba1\u6a21\u5f0f<\/A> \u7b80\u5355<\/A> \u5de5\u5382<\/A> \u6a21\u5f0f<\/A> Simple<\/A> Factory<\/A> Pattern<\/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":"47.106.78.186","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"Golang\u8bbe\u8ba1\u6a21\u5f0f\u2014\u7b80\u5355\u5de5\u5382\u6a21\u5f0f(Simple Factory Pattern)","lastview":"1711878529","digg_num":"0","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}