面试题答案
一键面试设计思路
- 接口设计:定义基础接口
Entity
,包含通用的Update
方法。在此基础上,通过继承来扩展功能,如Character
接口继承Entity
并新增Attack
方法,Enemy
和Player
接口再分别继承Character
并添加各自独特的方法。 - 结构体设计:创建结构体来实现这些接口。结构体的设计应遵循接口的要求,每个结构体实现其对应的接口方法。
- 模块使用:在不同模块(战斗模块、地图模块等)中,通过接口类型来操作这些结构体实例,以实现多态性,提高代码的可维护性和扩展性。
关键代码示例(以Go语言为例)
// 定义基础接口Entity
type Entity interface {
Update()
}
// 定义Character接口,继承自Entity
type Character interface {
Entity
Attack()
}
// 定义Enemy接口,继承自Character
type Enemy interface {
Character
Defend()
}
// 定义Player接口,继承自Character
type Player interface {
Character
ManageInventory()
}
// 定义Character结构体,实现Character接口
type character struct{}
func (c *character) Update() {
// 实现更新逻辑
}
func (c *character) Attack() {
// 实现攻击逻辑
}
// 定义Enemy结构体,实现Enemy接口
type enemy struct {
character
}
func (e *enemy) Defend() {
// 实现防御逻辑
}
// 定义Player结构体,实现Player接口
type player struct {
character
}
func (p *player) ManageInventory() {
// 实现库存管理逻辑
}
// 战斗模块示例
func battleModule(entity Entity) {
if char, ok := entity.(Character); ok {
char.Attack()
}
if e, ok := entity.(Enemy); ok {
e.Defend()
}
if p, ok := entity.(Player); ok {
p.ManageInventory()
}
entity.Update()
}
// 地图模块示例
func mapModule(entity Entity) {
entity.Update()
// 地图模块特定逻辑
}
在上述代码中:
- 首先定义了一系列接口,通过接口继承来扩展功能。
- 然后创建了对应的结构体,并实现了接口方法。
- 在不同模块中,通过接口类型来操作结构体实例,实现了多态性,使代码更具可维护性和扩展性。例如在
battleModule
中,根据传入实体的实际类型,调用不同的方法。在mapModule
中,仅调用Update
方法来更新实体状态。