12-抽象工廠方法模式(Easy搞定Golang設(shè)計模式)

package main
import "fmt"
type AbstractGraphicsCard interface {
? ? Display()
}
type AbstractMemory interface {
? ? Storage()
}
type AbstractCPU interface {
? ? Calculate()
}
// 抽象工廠
type AAbstractFactory interface {
? ? CreateGraphicsCard() AbstractGraphicsCard
? ? CreateStorage() AbstractMemory
? ? CreateCPU() AbstractCPU
}
//實現(xiàn)產(chǎn)品
//Intel 三大產(chǎn)品
type IntelGraphicsCard struct {
}
type IntelMemory struct {
}
type IntelCPU struct {
}
func (intel *IntelGraphicsCard) Display() { fmt.Println("Intel ?顯卡") }
func (intel *IntelMemory) Storage() ? ? ? { fmt.Println("Intel 內(nèi)存條") }
func (intel *IntelCPU) Calculate() ? ? ? ?{ fmt.Println("Intel ?CPU") }
type IntelFactory struct {
}
func (*IntelFactory) CreateGraphicsCard() AbstractGraphicsCard {
? ? return new(IntelGraphicsCard)
}
func (*IntelFactory) CreateStorage() AbstractMemory {
? ? return new(IntelMemory)
}
func (*IntelFactory) CreateCPU() AbstractCPU {
? ? return new(IntelCPU)
}
//Nvidia三大產(chǎn)品
type NvidiaGraphicsCard struct {
}
type NvidiaMemory struct {
}
type NvidiaCPU struct {
}
func (nvidia *NvidiaGraphicsCard) Display() { fmt.Println("nvidia ? 顯卡") }
func (nvidia *NvidiaMemory) Storage() ? ? ? { fmt.Println("nvidia 內(nèi)存條") }
func (nvidia *NvidiaCPU) Calculate() ? ? ? ?{ fmt.Println("nvidia ? CPU") }
type NvidiaFactory struct {
}
func (*NvidiaFactory) CreateGraphicsCard() AbstractGraphicsCard {
? ? return new(NvidiaGraphicsCard)
}
func (*NvidiaFactory) CreateStorage() AbstractMemory {
? ? return new(NvidiaMemory)
}
func (*NvidiaFactory) CreateCPU() AbstractCPU {
? ? return new(NvidiaCPU)
}
//Kingston
type KingstonGraphicsCard struct {
}
type KingstonMemory struct {
}
type KingstonCPU struct {
}
func (kingston *KingstonGraphicsCard) Display() { fmt.Println("kingston 顯卡") }
func (kingston *KingstonMemory) Storage() ? ? ? { fmt.Println("kingston 內(nèi)存條") }
func (kingston *KingstonCPU) Calculate() ? ? ? ?{ fmt.Println("kingston CPU") }
type KingstonFactory struct {
}
func (*KingstonFactory) CreateGraphicsCard() AbstractGraphicsCard {
? ? return new(KingstonGraphicsCard)
}
func (*KingstonFactory) CreateStorage() AbstractMemory {
? ? return new(KingstonMemory)
}
func (*KingstonFactory) CreateCPU() AbstractCPU {
? ? return new(KingstonCPU)
}
func main() {
? ? intelFactory := IntelFactory{}
? ? intelFactory.CreateGraphicsCard().Display()
? ? intelFactory.CreateStorage().Storage()
? ? intelFactory.CreateCPU().Calculate()
? ? //生產(chǎn)
? ? fmt.Println("========")
? ? nvidiaFactory := NvidiaFactory{}
? ? kingstonFactory := KingstonFactory{}
? ? intelFactory.CreateCPU().Calculate()
? ? nvidiaFactory.CreateStorage().Storage()
? ? kingstonFactory.CreateGraphicsCard().Display()
}