第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為工廠(chǎng)方法創(chuàng)建的對(duì)象提供依賴(lài)項(xiàng)

為工廠(chǎng)方法創(chuàng)建的對(duì)象提供依賴(lài)項(xiàng)

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

1 回答

?
炎炎設(shè)計(jì)

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以使用注冊(cè)表模式:


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]()

}

然后,每個(gè)實(shí)現(xiàn)可以留在自己的包中,并使用以下命令注冊(cè)其工廠(chǎng):init()


package storeA


func init() {

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

        // create and return a new Store

    })

}


查看完整回答
反對(duì) 回復(fù) 2022-08-15
  • 1 回答
  • 0 關(guān)注
  • 89 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)