DAY 24:Composite Pattern,管理有层次的物件们

什麽是 Composite Pattern?

将单一与多个物件的使用方式统一给使用者使用

UML 图如下:

问题情境

假设 PS5 设计的测试阶段,会以单核心多核心的 cpu 来测试,单核心 cpu 测试使用的指令需与多核心 cpu 使用的指令相同,这样 PS5 单核与多核才都可以拿来测试

解决方式

UML 图如下:

我们先定义了CPUinterface,单核心 cpuSingleCPU{}与多核心 cpuMultiCPUs{}都以此 interface 来实作,PS5Start()相依CPUinterface,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 开头

>>:  【Day 28】设置开发环境 & 开发

Day 2 - 何谓 Rancher

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

Day14-Vue CLI 介绍

他是Vue.js官方提供的开发工具,可以快速的建置架构,常用於制作单页应用(SPA)网站。 安装 安...

Day-13 Excel交叉分析真的很难吗?

今日练习档ԅ( ¯་། ¯ԅ) 今天要与大家分享我所认为较进阶的枢纽分析表应用,也就是「交叉分析数据...

【D14】取得股票历史资料

前言 就跟昨天的加权指数一样,我们之前的取得的CSV都是「每日」的资讯,但是我们需要历史资料才能归纳...

Day 3 - Vue的专案结构

除了可以用CDN(Content Delivery Network)的方式来引入Vue之外,我们还可...