12-抽象工厂方法模式(Easy搞定Golang设计模式)

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
}
//实现产品
//Intel 三大产品
type IntelGraphicsCard struct {
}
type IntelMemory struct {
}
type IntelCPU struct {
}
func (intel *IntelGraphicsCard) Display() { fmt.Println("Intel 显卡") }
func (intel *IntelMemory) Storage() { fmt.Println("Intel 内存条") }
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三大产品
type NvidiaGraphicsCard struct {
}
type NvidiaMemory struct {
}
type NvidiaCPU struct {
}
func (nvidia *NvidiaGraphicsCard) Display() { fmt.Println("nvidia 显卡") }
func (nvidia *NvidiaMemory) Storage() { fmt.Println("nvidia 内存条") }
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 内存条") }
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()
//生产
fmt.Println("========")
nvidiaFactory := NvidiaFactory{}
kingstonFactory := KingstonFactory{}
intelFactory.CreateCPU().Calculate()
nvidiaFactory.CreateStorage().Storage()
kingstonFactory.CreateGraphicsCard().Display()
}