首页 > 其他分享 >抽象工厂模式 Golang

抽象工厂模式 Golang

时间:2022-09-30 00:56:34浏览次数:73  
标签:return struct fmt 工厂 Golang 抽象 func type calculate

参考链接
练习:
设计一个电脑主板架构,电脑包括(显卡,内存,CPU)3个固定的插口,显卡具有显示功能(display,功能实现只要打印出意义即可),内存具有存储功能(storage),cpu具有计算功能(calculate)。
现有Intel厂商,nvidia厂商,Kingston厂商,均会生产以上三种硬件。
要求组装两台电脑,
1台(Intel的CPU,Intel的显卡,Intel的内存)
1台(Intel的CPU, nvidia的显卡,Kingston的内存)
用抽象工厂模式实现。

package main

import "fmt"

// ===========抽象层===========
type AbstractGPU interface {
	display()
}
type AbstractCPU interface {
	calculate(a, b int)
}
type AbstractMemory interface {
	storage(data string)
}

// 抽象工厂
type AbstractFactory interface {
	CreateGPU() AbstractGPU
	CreateCPU() AbstractCPU
	CreateMemory() AbstractMemory
}

//============实现层=============
// Intel intel 产品族
type IntelMemory struct {
	memory string
}

func (i *IntelMemory) storage(data string) {
	//TODO implement me
	i.memory = data
	fmt.Printf("%s stroage successful!\n", i.memory)
}

type IntelCPU struct {
}

func (i *IntelCPU) calculate(a, b int) {
	//TODO implement me
	fmt.Printf("calc %d + %d is %d\n", a, b, a+b)
}

type IntelGPU struct {
}

func (i *IntelGPU) display() {
	//TODO implement me
	fmt.Println("i am intel")
}

type IntelFactory struct {
}

func (i *IntelFactory) CreateGPU() AbstractGPU {
	var GPU AbstractGPU
	GPU = new(IntelGPU)
	return GPU
	//return &IntelGPU{}
}
func (i *IntelFactory) CreateCPU() AbstractCPU {
	return &IntelCPU{}
}
func (i *IntelFactory) CreateMemory() AbstractMemory {
	return &IntelMemory{}
}

// Nvidia nvidia 产品族
type NvidiaMemory struct {
}

func (i *NvidiaMemory) storage(data string) {
	//TODO implement me
	fmt.Printf("%s stroage successful!\n", data)
}

type NvidiaCPU struct {
}

func (i *NvidiaCPU) calculate(a, b int) {
	//TODO implement me
	fmt.Printf("calc %d + %d is %d\n", a, b, a+b)
}

type NvidiaGPU struct {
}

func (i *NvidiaGPU) display() {
	//TODO implement me
	fmt.Println("i am Nvidia")
}

type NvidiaFactory struct {
}

func (i *NvidiaFactory) CreateGPU() AbstractGPU {
	var GPU AbstractGPU
	GPU = new(NvidiaGPU)
	return GPU
	//return &NvidiaGPU{}
}

func (i *NvidiaFactory) CreateCPU() AbstractCPU {
	return &NvidiaCPU{}
}
func (i *NvidiaFactory) CreateMemory() AbstractMemory {
	return &NvidiaMemory{}
}

// Kingston kingston 产品族
type KingstonMemory struct {
}

func (i *KingstonMemory) storage(data string) {
	//TODO implement me
	fmt.Printf("%s stroage successful!\n", data)
}

type KingstonCPU struct {
}

func (i *KingstonCPU) calculate(a, b int) {
	//TODO implement me
	fmt.Printf("calc %d + %d is %d\n", a, b, a+b)
}

type KingstonGPU struct {
}

func (i *KingstonGPU) display() {
	//TODO implement me
	fmt.Println("i am Kingston")
}

type KingstonFactory struct {
}

func (i *KingstonFactory) CreateGPU() AbstractGPU {
	var GPU AbstractGPU
	GPU = new(KingstonGPU)
	return GPU
	//return &KingstonGPU{}
}

func (i *KingstonFactory) CreateCPU() AbstractCPU {
	return &KingstonCPU{}
}
func (i *KingstonFactory) CreateMemory() AbstractMemory {
	return new(KingstonMemory)
}

type Compute struct {
	cpu    AbstractCPU
	gpu    AbstractGPU
	memory AbstractMemory
}

func (c *Compute) calculate(a, b int) {
	c.cpu.calculate(a, b)
}
func (c *Compute) display() {
	c.gpu.display()
}
func (c *Compute) storage(data string) {
	c.memory.storage(data)
}

func main() {
	//创建Intel nvidia kingston工厂
	intelF := new(IntelFactory)
	nvidiaF := new(NvidiaFactory)
	kingstonF := new(KingstonFactory)

	myworkpc := new(Compute)
	myworkpc.cpu = intelF.CreateCPU()
	myworkpc.gpu = nvidiaF.CreateGPU()
	myworkpc.memory = kingstonF.CreateMemory()

	myworkpc.display()
	myworkpc.calculate(1, 2)
	myworkpc.storage("i love huxue")

	mygamepc := new(Compute)
	mygamepc.cpu = intelF.CreateCPU()
	mygamepc.gpu = nvidiaF.CreateGPU()
	mygamepc.memory = intelF.CreateMemory()

	mygamepc.display()
	mygamepc.calculate(114, 514)
	mygamepc.storage("i love huxue too")
}


标签:return,struct,fmt,工厂,Golang,抽象,func,type,calculate
From: https://www.cnblogs.com/notomatoes/p/16743591.html

相关文章

  • 抽象类和接口
    1、抽象方法在介绍抽象类和抽象方法之前,需要先了解一下抽象方法,抽象类,接口的基本概念。抽象方法就是一个方法,其比普通方法多了一个关键字abstract修饰,少了方法体。抽象......
  • java-抽象类笔记
    抽象方法和抽象类抽象方法使用abstract修饰的方法,没有方法体,只有声明。定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。抽象类包含抽象方......
  • Java中抽象类和接口的介绍及二者间的区别
    转载自Java中抽象类和接口的介绍及二者间的区别 接口(Interface)和抽象类(AbstractClass)是支持抽象类定义的两种机制。一、抽象类在Java中被abstract关键字修......
  • 工厂模式
    一.工厂方法模式1.简单工厂模式基本介绍就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。代码实例​ 准备一个pizza抽象类,抽象准备原材料的方法,有两个实......
  • 如何构建数字化工厂?
    首先你的明白什么事数字化工厂。数字化工厂实质上就是物理形式的工厂在数字空间的投射,并基于此来实现的以人机物(Human,Machines,Things)泛在互联为基础上,深度感知为支撑,智能决......
  • 智能工厂的ERP和MES之间的区别?
    无论在哪里,ERP(EnterpriseResourcePlanning,企业资源计划)和MES(ManufacturingExecutionSystem,即制造执行系统)系统都不是同样的东西,也不应该拿来谈区别的,在智能工厂......
  • 接口和抽象类
    抽象类抽象方法当多个类中具有共性方法时,我们就会向上抽取形成父类,并在父类中定义这个共性方法。而有时,父类中的方法并不能明确每个子类的具体实现,那么这种方法就称......
  • 【Go学习】golang os/exec 执行外部命令
    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o.funcLookPath(filestring)(string,error)//LookPath在环境变量......
  • Golang 中的 WaitGroups 指南
    Golang中的WaitGroups指南这个强大功能的简要说明Photoby谢苗鲍里索夫on不飞溅Goroutines是很好用的工具,但是它们有一个问题。在这篇文章中,我们将调查这个问......
  • Golang Redis有序集合(sorted set)
    Redis有序集合(sortedset)和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数,这个分数主要用于集合元素排序。引用git......