亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為工廠方法創建的對象提供依賴項

為工廠方法創建的對象提供依賴項

Go
暮色呼如 2022-08-15 19:27:08
給定以下接口:type Store interface { // some methods}我計劃創建一個“工廠”,它將根據傳入的值為我提供正確的實現:Storefunc CreateStore(envVar EnvironmentProvider) Store {   if envVar == "A" {     return &StoreA{              //dependencies to create a StoreA             }   else {     return &DefaultStore {               // dependencies to create a DefaultStore              }}我有點糾結于如何為OR提供依賴項。它們依賴于完全不同的對象,我不想將兩者都傳遞到函數的依賴關系中,以及作為函數的參數。此外,將來可能會有更多的實施。當然,我可以簡單地在每個if分支中創建依賴項,但這不適合測試。對于這種情況,您使用哪種模式?StoreADefaultStoreStoreADefaultStoreCreateStoreStorego
查看完整描述

1 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您可以使用注冊表模式:


var storeRegistry=map[string]func() Store{}


func Register(name string,factory func() Store) {

   storeRegistry[name]=factory

}


func CreateStore(env EnvironmentProvider) Store {

   storeType:= // Determine store type from env

   return storeRegistry[env.StoreType]()

}

然后,每個實現可以留在自己的包中,并使用以下命令注冊其工廠:init()


package storeA


func init() {

   registrypkg.Register("storetype", func() registrypkg.Store {

        // create and return a new Store

    })

}


查看完整回答
反對 回復 2022-08-15
  • 1 回答
  • 0 關注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號