设计相同介面但不同实作的物件,再由使用端以此介面去选择要使用何种物件
UML 图如下:
假设 PS5 会使用不同厂商的显示晶片,需要有一个方法让游戏以不同的显示晶片运行。
PS5{}.gpu
依赖GPU
interface,A 厂商的AGPU{}
与 B 厂商的BGPU{}
都是以此GPU
interface 实作,我们在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()
}
【前言】 我的习惯是先在 Youtube 看完落落长的影片,然後才去 Coursera 看看有什麽...
安装 官方网站:Download - Unity 注册、安装 注册UnityID 安装Unity H...
更新一下get_iv这支程序 def get_iv(nonce): sha_nonce_value ...
前言 在上一篇文章提到由於 Pod 是 Stateless ,因此我们可以扩充 Pod ,今天这篇文...
第一次遇到发PR,原来就是档案修改後,发通知请原作来拉回去(Pull)的请求(Request) 1....