{"id":13,"date":"2023-03-13T19:12:16","date_gmt":"2023-03-13T11:12:16","guid":{"rendered":"http:\/\/www.dujshou.com\/?p=13"},"modified":"2024-09-30T10:00:42","modified_gmt":"2024-09-30T02:00:42","slug":"%e6%88%bf%e8%b4%b7%e9%a6%96%e4%bb%98","status":"publish","type":"post","link":"https:\/\/www.dujshou.com\/index.php\/2023\/03\/13\/%e6%88%bf%e8%b4%b7%e9%a6%96%e4%bb%98\/","title":{"rendered":"go\u8bed\u8a00\u5e38\u7528\u7684\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u53ca\u5b9e\u73b0\u4ee3\u7801"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u5355\u4f8b\u6a21\u5f0f\uff08Singleton Pattern\uff09\uff1a\u786e\u4fdd\u4e00\u4e2a\u7c7b\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5e76\u63d0\u4f9b\u5168\u5c40\u8bbf\u95ee\u70b9\u3002\u5728Go\u8bed\u8a00\u4e2d\uff0c\u4f7f\u7528sync.Once\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u88ab\u521b\u5efa\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">package singleton<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import (<br>&#8220;sync&#8221;<br>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Singleton struct {}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">var instance *Singleton<br>var once sync.Once<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func GetInstance() *Singleton {<br>once.Do(func() {<br>instance = &amp;Singleton{}<br>})<br>return instance<br>}<br>\u5de5\u5382\u6a21\u5f0f\uff08Factory Pattern\uff09\uff1a\u5b9a\u4e49\u4e00\u4e2a\u521b\u5efa\u5bf9\u8c61\u7684\u63a5\u53e3\uff0c\u8ba9\u5b50\u7c7b\u51b3\u5b9a\u5b9e\u4f8b\u5316\u54ea\u4e2a\u7c7b\u3002\u5728Go\u8bed\u8a00\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528interface\u6765\u5b9a\u4e49\u5bf9\u8c61\u7684\u521b\u5efa\u65b9\u6cd5\uff0c\u7136\u540e\u5177\u4f53\u7684\u5de5\u5382\u5b9e\u73b0\u63a5\u53e3\u65b9\u6cd5\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">package factory<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Product interface {<br>GetName() string<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type ConcreteProduct struct {}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (p *ConcreteProduct) GetName() string {<br>return &#8220;ConcreteProduct&#8221;<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Factory interface {<br>CreateProduct() Product<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type ConcreteFactory struct {}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (f *ConcreteFactory) CreateProduct() Product {<br>return &amp;ConcreteProduct{}<br>}<br>\u89c2\u5bdf\u8005\u6a21\u5f0f\uff08Observer Pattern\uff09\uff1a\u5b9a\u4e49\u4e00\u79cd\u4e00\u5bf9\u591a\u7684\u4f9d\u8d56\u5173\u7cfb\uff0c\u8ba9\u591a\u4e2a\u89c2\u5bdf\u8005\u5bf9\u8c61\u540c\u65f6\u76d1\u542c\u67d0\u4e00\u4e2a\u4e3b\u9898\u5bf9\u8c61\u3002\u5728Go\u8bed\u8a00\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528channel\u5b9e\u73b0\u89c2\u5bdf\u8005\u6a21\u5f0f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">package observer<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Observer interface {<br>Update()<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Subject interface {<br>Attach(observer Observer)<br>Detach(observer Observer)<br>Notify()<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type ConcreteObserver struct {}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (o *ConcreteObserver) Update() {}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type ConcreteSubject struct {<br>observers []Observer<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (s *ConcreteSubject) Attach(observer Observer) {<br>s.observers = append(s.observers, observer)<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (s *ConcreteSubject) Detach(observer Observer) {<br>for i, o := range s.observers {<br>if o == observer {<br>s.observers = append(s.observers[:i], s.observers[i+1:]\u2026)<br>break<br>}<br>}<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (s *ConcreteSubject) Notify() {<br>for _, o := range s.observers {<br>o.Update()<br>}<br>}<br>\u9002\u914d\u5668\u6a21\u5f0f\uff08Adapter Pattern\uff09\uff1a\u5c06\u4e00\u4e2a\u7c7b\u7684\u63a5\u53e3\u8f6c\u6362\u6210\u5ba2\u6237\u5e0c\u671b\u7684\u53e6\u4e00\u4e2a\u63a5\u53e3\u3002\u5728Go\u8bed\u8a00\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528interface\u6765\u5b9e\u73b0\u9002\u914d\u5668\u6a21\u5f0f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">package adapter<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Target interface {<br>Request()<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Adaptee interface {<br>SpecificRequest()<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Adapter struct {<br>adaptee Adaptee<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (a *Adapter) Request() {<br>a.adaptee.SpecificRequest()<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type ConcreteAdaptee struct {}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (a *ConcreteAdaptee) SpecificRequest() {}<br>\u7b56\u7565\u6a21\u5f0f\uff08Strategy Pattern\uff09\uff1a\u5b9a\u4e49\u4e00\u7cfb\u5217\u7b97\u6cd5\uff0c\u628a\u5b83\u4eec\u5c01\u88c5\u8d77\u6765\uff0c\u5e76\u4e14\u4f7f\u5b83\u4eec\u53ef\u4ee5\u76f8\u4e92\u66ff\u6362\u3002\u5728Go\u8bed\u8a00\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u51fd\u6570\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u5b9e\u73b0\u7b56\u7565\u6a21\u5f0f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">package strategy<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Strategy func()<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">type Context struct {<br>strategy Strategy<br>}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">func (c *Context) SetStrategy<br>\u6a21\u677f\u65b9\u6cd5\u6a21\u5f0f\uff08Template Method Pattern\uff09\uff1a\u5b9a\u4e49\u4e00\u4e2a\u64cd\u4f5c\u4e2d\u7684\u7b97\u6cd5\u6846\u67b6\uff0c\u5c06\u4e00\u4e9b\u6b65\u9aa4\u5ef6\u8fdf\u5230\u5b50\u7c7b\u4e2d\u3002\u5728Go\u8bed\u8a00\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u63a5\u53e3\u548c\u7ec4\u5408\u5b9e\u73b0\u6a21\u677f\u65b9\u6cd5\u6a21\u5f0f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8d23\u4efb\u94fe\u6a21\u5f0f\uff08Chain of Responsibility Pattern\uff09\uff1a\u5c06\u8bf7\u6c42\u7684\u53d1\u9001\u8005\u548c\u63a5\u6536\u8005\u89e3\u8026\uff0c\u4f7f\u591a\u4e2a\u5bf9\u8c61\u90fd\u6709\u673a\u4f1a\u5904\u7406\u8fd9\u4e2a\u8bf7\u6c42\u3002\u5728Go\u8bed\u8a00\u4e2d\uff0c\u53ef\u4ee5\u4f7f\u7528\u94fe\u8868\u6216\u8005\u5207\u7247\u5b9e\u73b0\u8d23\u4efb\u94fe\u6a21\u5f0f\u3002<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5355\u4f8b\u6a21\u5f0f\uff08Singleton Pattern\uff09\uff1a\u786e\u4fdd\u4e00\u4e2a\u7c7b\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\uff0c\u5e76\u63d0\u4f9b\u5168\u5c40\u8bbf\u95ee\u70b9\u3002\u5728Go\u8bed\u8a00\u4e2d\uff0c\u4f7f\u7528s [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-13","post","type-post","status-publish","format-standard","hentry","category-php"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/posts\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":3,"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/posts\/13\/revisions"}],"predecessor-version":[{"id":55,"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/posts\/13\/revisions\/55"}],"wp:attachment":[{"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/media?parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/categories?post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dujshou.com\/index.php\/wp-json\/wp\/v2\/tags?post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}