将单一与多个物件的使用方式统一给使用者使用
UML 图如下:
假设 PS5 设计的测试阶段,会以单核心或多核心的 cpu 来测试,单核心 cpu 测试使用的指令需与多核心 cpu 使用的指令相同,这样 PS5 单核与多核才都可以拿来测试
UML 图如下:
我们先定义了CPU
interface,单核心 cpuSingleCPU{}
与多核心 cpuMultiCPUs{}
都以此 interface 来实作,PS5Start()
相依CPU
interface,SingleCPU{}
与MultiCPUs{}
都可以带入来运行.Run()
MultiCPUs{}
有.AddSubCPU()
可以新增多个 cpu 至此 struct,而MultiCPUs{}.Run()
会将多个 cpu 依依运行。
(相关的 code 在Github - go-design-patterns)
code 如下:
package main
import "fmt"
type CPU interface {
Run()
}
type SingleCPU struct{}
func (SingleCPU) Run() {
fmt.Println("run cpu")
}
type MultiCPUs struct {
SubCPUs []CPU
}
func (d MultiCPUs) Run() {
for _, cpu := range d.SubCPUs {
cpu.Run()
}
}
func (m *MultiCPUs) AddSubCPU(cpu CPU) {
m.SubCPUs = append(m.SubCPUs, cpu)
}
func PS5Start(cpu CPU) {
cpu.Run()
}
func main() {
singleCPU1 := SingleCPU{}
PS5Start(singleCPU1)
singleCPU2 := SingleCPU{}
PS5Start(singleCPU2)
multiCPUs := MultiCPUs{}
multiCPUs.AddSubCPU(&singleCPU1)
multiCPUs.AddSubCPU(&singleCPU2)
PS5Start(multiCPUs)
}
<<: Day22 - this&Object Prototypes Ch3 Objects - Review 开头
本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...
他是Vue.js官方提供的开发工具,可以快速的建置架构,常用於制作单页应用(SPA)网站。 安装 安...
今日练习档ԅ( ¯་། ¯ԅ) 今天要与大家分享我所认为较进阶的枢纽分析表应用,也就是「交叉分析数据...
前言 就跟昨天的加权指数一样,我们之前的取得的CSV都是「每日」的资讯,但是我们需要历史资料才能归纳...
除了可以用CDN(Content Delivery Network)的方式来引入Vue之外,我们还可...