是否可以重构以下代码以消除重复?
我希望我的 GameObject 实现调用不同更新处理程序(如我的“AfterUpdate”)的“更新”任务的逻辑。当前版本有效,但“更新”有两种实现,它们是相同的。在 GameObject 上调用的 AfterUpdate 应该对其属性进行操作,在 HeroGameObject 上调用的 AfterUpdate 应该可以访问 HeroGameObject 的属性(例如“health”)。
我可以做什么更好?谢谢你。
package main
import "fmt"
type Point struct {
x, y int
}
///////////////////////
type GameObject struct {
Point
title string
status int
ticks float32
spriteIndex int
}
func (g *GameObject) Update() {
if g.ticks == 0 {
g.spriteIndex++
g.AfterUpdate()
}
}
func (g *GameObject) AfterUpdate() {
g.status = 0 //suppose it does something meaningful
fmt.Println("GameObject afterUpdate handler invoked")
}
///////////////////////
type HeroGameObject struct {
GameObject
health float32
}
func (h *HeroGameObject) Update() {
if h.ticks == 0 {
h.spriteIndex++
h.AfterUpdate()
}
}
func (h *HeroGameObject) AfterUpdate() {
h.health-- //suppose it does something meaningful but *different*, using its own properties, for example "health"
fmt.Println("HeroGameObject afterUpdate handler invoked")
}
///////////////////////
func main() {
gameObject := &GameObject{
Point: Point{
x: 0,
y: 0,
},
title: "dummy object",
status: 0,
ticks: 0,
spriteIndex: 0,
}
heroObject := &HeroGameObject{
GameObject: GameObject{
Point: Point{
x: 0,
y: 0,
},
title: "hero object",
status: 0,
ticks: 0,
spriteIndex: 0,
},
health: 0,
}
gameObject.Update()
heroObject.Update()
}
输出:
调用游戏对象 afterUpdate 处理程序
调用 HeroGameObject afterUpdate 处理程序
至尊宝的传说
相关分类