單利模式
func newsingleton() *singleton
}return instance
}func newsingleton() *singleton
}return instance
}func newsingleton() *singleton }}
return instance
}func newsingleton() *singleton
mu.lock()
defer mu.unlock()
if initialized == 0
atomic.storeuint32(&initialized, 1)
}return instance
}func newsingleton() *singleton
})return instance
}
工廠模式
工廠根據條件產生不同功能的類。工廠模式使用經常使用在替代new的場景中,讓工廠統一根據不同條件生產不同的類。工廠模式在解耦方面將使用者和產品之間的依賴推給了工廠,讓工廠承擔這種依賴關係。工廠模式又分為簡單工廠,抽象工廠。golang實現乙個簡單工廠模式如下:
package main
import (
"fmt"
)type op inte***ce
type a struct
type b struct
type factory struct
func (a *a) getname() string
func (b *b) getname() string
func (f *factory) create(name string) op
return nil
}func main()
依賴注入
具體含義是:當某個角色(可能是乙個例項,呼叫者)需要另乙個角色(另乙個例項,被呼叫者)的協助時,在傳統的程式設計過程中,通常由呼叫者來建立被呼叫者的例項。但在這種場景下,建立被呼叫者例項的工作通常由容器(ioc)來完成,然後注入呼叫者,因此也稱為依賴注入。golang利用函式f可以當做引數來傳遞,同時配合reflect包拿到引數的型別,然後根據呼叫者傳來的引數和型別匹配上之後,最後通過reflect.call()執行具體的函式。
package main
import (
"fmt"
"reflect"
)var inj *injector
type injector struct
func (inj *injector) setmap(value inte***ce{})
func (inj *injector) get(t reflect.type) reflect.value
func (inj *injector) invoke(i inte***ce{}) inte***ce{}
invalues := make(reflect.value, t.numin())
for k := 0; k < t.numin(); k++
ret := reflect.valueof(i).call(invalues)
return ret
}func host(name string, f func(a int, b string) string)
func dependency(a int, b string) string
func main()
inj.setmap(3030)
inj.setmap("zdd")
d := dependency
host("zddhub", d)
inj.setmap(8080)
inj.setmap("www.zddhub.com")
host("website", d)
}
裝飾器模式
裝飾器模式:允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。我們使用最為頻繁的場景就是http請求的處理:對http請求做cookie校驗。
Golang 設計模式
策略模式 strategy 簡介 策略模式 將演算法或操作抽象成實現共同介面 可以被替換的類,實現邏輯和具體演算法的解耦。將各種行為抽象成演算法,封裝演算法為物件 演算法實現共同介面,呼叫者呼叫時不考慮演算法具體實現,呼叫介面方法即可 呼叫者可隨時替換此演算法物件 應用場景 多個方法選擇一使用,且它...
Golang設計模式 工廠模式
定義乙個用於建立物件的介面,讓子類界定例項化哪個類。工廠方法使乙個類的例項化延遲到子類。簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶的選擇動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。如果是翻譯,讓客戶端不管用哪個類的例項,只需把翻譯型別 int 1,2,3 給工廠...
設計模式golang 工廠模式
建立物件的介面,讓其子類自己決定例項化哪個類,工廠模式使其建立過程延遲到子類進行。1.產品抽象介面 2.工廠建立產品方法 3.產品例項 選銀行借錢的例子,資質方法根據你的收入等其他情況給你選擇銀行。抽象產品介面 type bank inte ce 具體銀行產品例項 type bjbank struc...