面试题答案
一键面试设计思路
- 定义接口:创建一个通用的接口,包含所有角色共有的方法,如移动和攻击。这样不同的角色类型只要实现这个接口,就可以通过该接口进行统一管理。
- 实现角色结构体及接口方法:为每个具体角色(战士、法师、刺客等)创建结构体,并为这些结构体实现接口中定义的方法,以实现多态。
- 角色管理模块:创建一个角色管理模块,通过接口类型的切片来存储不同的角色实例,方便对所有角色进行统一操作。
关键代码示例
package main
import "fmt"
// 定义角色接口
type Character interface {
Move()
Attack()
}
// 战士结构体
type Warrior struct {
Name string
}
// 战士移动方法
func (w Warrior) Move() {
fmt.Printf("%s 战士正在移动\n", w.Name)
}
// 战士攻击方法
func (w Warrior) Attack() {
fmt.Printf("%s 战士正在进行近战攻击\n", w.Name)
}
// 法师结构体
type Mage struct {
Name string
}
// 法师移动方法
func (m Mage) Move() {
fmt.Printf("%s 法师正在移动\n", m.Name)
}
// 法师攻击方法
func (m Mage) Attack() {
fmt.Printf("%s 法师正在释放魔法攻击\n", m.Name)
}
// 刺客结构体
type Assassin struct {
Name string
}
// 刺客移动方法
func (a Assassin) Move() {
fmt.Printf("%s 刺客正在潜行移动\n", a.Name)
}
// 刺客攻击方法
func (a Assassin) Attack() {
fmt.Printf("%s 刺客正在进行暗杀攻击\n", a.Name)
}
// 角色管理模块
type CharacterManager struct {
Characters []Character
}
// 添加角色到管理模块
func (cm *CharacterManager) AddCharacter(c Character) {
cm.Characters = append(cm.Characters, c)
}
// 让所有角色执行移动和攻击动作
func (cm *CharacterManager) PerformActions() {
for _, char := range cm.Characters {
char.Move()
char.Attack()
}
}
你可以通过以下方式使用这些代码:
func main() {
manager := CharacterManager{}
warrior := Warrior{Name: "大壮"}
mage := Mage{Name: "哈利"}
assassin := Assassin{Name: "小李"}
manager.AddCharacter(warrior)
manager.AddCharacter(mage)
manager.AddCharacter(assassin)
manager.PerformActions()
}