zxh0/jvmgo-book

instructions/factory.go的重构建议

xumingxsh opened this issue · 3 comments

最近拜读大作获益匪浅,非常感谢,作者高才,本书立意非常好。
交流一下,instructions/factory.go中,可否如下重构,如果重构,有什么好处和坏处:
type CMDExexute interface {
Execute(frame *rtda.Frame)
}

var (
cmds map[byte]CMDExexute
)

func initCommands() {
if len(cmds) > 0 {
return
}
initCMDMap(0x00, func() CMDExexute { return &constants.NOP{}})
//...
}

func initCMDMap(code byte, fun func() CMDExexute) {
cmd := fun()
cmds[code] = CMDExexute(cmd)
}

func NewInstruction(opcode byte) base.Instruction {
initCommands()
v, ok := cmds[opcode]
if !ok {
panic(fmt.Errorf("Unsupported opcode: 0x%x!", opcode))
}
return v.(base.Instruction)
}

factory.txt

zxh0 commented

这个代码格式看着实在痛苦

我看着也痛苦,不好意思, 没注意。 这是我学习您的书时,根据您的代码重构的factory.go,这个会好一些:https://gitee.com/xumingxsh/hi-jvm/blob/master/instructions/factory.go

zxh0 commented

这么重构也挺好的