欢迎光临散文网 会员登陆 & 注册

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

2023-07-19 17:20 作者:吾寐求之  | 我要投稿

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


}


12-抽象工厂方法模式(Easy搞定Golang设计模式)的评论 (共 条)

分享到微博请遵守国家法律