让代理物件操作实际物件,让代理物件处理与业务逻辑无关的事情
UML 图如下:
在操作物件时,有时候我们有加上 log、权限管控等等功能,这跟实际操作物件的业务无关,这时就可以用 Proxy Pattern 来去处理代理这些功能,并且保持介面相同。
Proxy Pattern 与 Decorator Pattern 相似,两者主要差异是:
PS5 在玩开启游戏时,需要新增 log,但如果在原本业务逻辑上加上 log 会模糊掉业务的意图,我们需要有方法解决此问题。
UML 图如下:
新增一个PS5
interface,PS5Machine{}
与PS5MachineProxy{}
都依照此 interface 实作,这样使用者在使用时只要依赖PS5
interface,就都可以使用PS5Machine{}
与PS5MachineProxy{}
。
在PS5MachineProxy{}.PlayGame()
里呼叫PS5Machine{}.PlayGame()
,并在整个实作添加 log。
相关的 code 在Github - go-design-patterns
code 如下:
package main
import (
"fmt"
"time"
)
type PS5 interface {
PlayGame()
}
type PS5Machine struct{}
func NewPS5Machine() *PS5Machine {
return &PS5Machine{}
}
func (u *PS5Machine) PlayGame() {
fmt.Println("play game")
}
type PS5MachineProxy struct {
ps5 *PS5Machine
}
func NewPS5MachineProxy(ps5 *PS5Machine) *PS5MachineProxy {
return &PS5MachineProxy{
ps5: ps5,
}
}
func (p *PS5MachineProxy) PlayGame() {
start := time.Now()
p.ps5.PlayGame()
fmt.Printf("play game cost time: %s", time.Since(start))
}
func main() {
ps5 := NewPS5MachineProxy(NewPS5Machine())
ps5.PlayGame()
}
-1. 序 OK,资料分析做完了, 现在要进入演算法的部分, 我们未来几天将从经典卷积神经网路架构中...
止损 止损顾名思义就是停止损失,今天在做企划的同时,世界并不会停下来等你发展,所以如果在做企划的同时...
在开始前先补充分享Kubernetes服务小知识 Pod: Pod是Kubernetes的基本运行...
**1.安装Visual Studio code ** 有安装的可跳过这一步 官网连结: http:...
图 9-1: 测试建立订单 接续 Day 8 使用 Order API 建立测试订单後,返回结果是...