DAY30:Strategy Pattern,选定不同的策略来执行

什麽是 Strategy Pattern?

设计相同介面但不同实作的物件,再由使用端以此介面去选择要使用何种物件

UML 图如下:

问题情境

假设 PS5 会使用不同厂商的显示晶片,需要有一个方法让游戏以不同的显示晶片运行。

解决方式

PS5{}.gpu依赖GPUinterface,A 厂商的AGPU{}与 B 厂商的BGPU{}都是以此GPUinterface 实作,我们在CreatePS5()的时候选定要使用哪个厂商的 GPU,由使用端去选择要使用何种策略来创造 PS5,选择完策略後,就可以使用此策略物件来玩游戏PS5{}.PlayGame()

UML 图如下:

code 如下:

(相关的 code 在Github - go-design-patterns)

package main

import "fmt"

type GPU interface {
	Draw()
}

type AGPU struct{}

func (a AGPU) Draw() {
	fmt.Println("draw!")
}

type BGPU struct{}

func (b BGPU) Draw() {
	fmt.Println("draw!")
}

type CGPU struct{}

func (b CGPU) Draw() {
	fmt.Println("draw!")
}

type PS5 struct {
	gpu GPU
}

func CreatePS5(gpu GPU) PS5 {
	ps5 := PS5{
		gpu: gpu,
	}
	return ps5
}

func (p PS5) PlayGame() {
	p.gpu.Draw()
	fmt.Println("play game!")
}

func main() {
	gpu := AGPU{} // BGPU{} or CGPU{}
	ps5 := CreatePS5(&gpu)
	ps5.PlayGame()
}

<<:  大脑如何精准学习 (2) 积极主动参与/好奇心

>>:  【D29】食材、厨具准备好了,准备上桌

Day 5【JavaScript】可以看到,将近是20公分的深度

【前言】 我的习惯是先在 Youtube 看完落落长的影片,然後才去 Coursera 看看有什麽...

1.unity安装、学习资源、游戏规划

安装 官方网站:Download - Unity 注册、安装 注册UnityID 安装Unity H...

[Day14] 建立订单交易API_7

更新一下get_iv这支程序 def get_iv(nonce): sha_nonce_value ...

Day12-Kubernetes 那些事 - Replication Controller

前言 在上一篇文章提到由於 Pod 是 Stateless ,因此我们可以扩充 Pod ,今天这篇文...

【Git】 发 PR 是什麽?

第一次遇到发PR,原来就是档案修改後,发通知请原作来拉回去(Pull)的请求(Request) 1....