asp.net 網(wǎng)站訪問量商品推廣與營銷的方式
適用場景
- 一個系統(tǒng)要獨立于它的產(chǎn)品的創(chuàng)建、組合和表示時。
- 一個系統(tǒng)要由多個產(chǎn)品系列中的一個來配置時。
- 當(dāng)你要強調(diào)一系列相關(guān)的產(chǎn)品對象的設(shè)計以便進(jìn)行聯(lián)合使用時。
- 當(dāng)你提供一個產(chǎn)品類庫,而只想顯示它們的接口而不是實現(xiàn)時
架構(gòu)演示
首先client這個東西可以接觸到三個接口, 分別是
- 全局的 abstract factory, 用來構(gòu)造對應(yīng)的子 abstract factory
- 然后我們可以通過子 abstract factory 去構(gòu)造相應(yīng)的 abstract product
- 局部的 abstract product, 用來從上面的 abstract factory 獲取對應(yīng)的屬性
好處就是:
- abstract factory 約束了創(chuàng)建接口的行為
- abstract product 約束了對應(yīng)產(chǎn)品的行為
代碼演示
首先創(chuàng)建一個工廠接口
type ISportFactory interface {MakeShoe() IShoeMakeShirt() IShirt
}
對應(yīng)的一個產(chǎn)品, 我們可以通過抽象工廠搞出來的兩個東西
type IShoe interface {setLogo(logo string)setSize(size int)getLogo() stringGetSize() int
}type IShirt interface {setLogo(logo string)setSize(size int)getLogo() stringGetSize() int
}
我們首先看一下對應(yīng)的工廠函數(shù):
func GetSportsFactory(brand string) ISportFactory {if brand == "adidas" {return &Adidas{}}if brand == "nike" {return &Nike{}}return nil
}
然后我們看實例的具體實現(xiàn)也就是makeshoe
func (adids *Adidas) MakeShoe() IShoe {return &AdidsShoe{Shoe: Shoe{logo: "adidas",size: 10,},}
}
同樣的我們可以到
//實現(xiàn)了ishoe接口
type Shoe struct {logo stringsize int
}