单一职责原则
单一职责原则(Single Responsibility Principle(SRP)),即一个类应该仅有一个引起它变化的原因。也就是说,一个类只应该有一个职责,它不该因为“不同的事情”而被改动,一个类只能有一个明确的“职责”,专注于自己的本职工作,其他的事情交给其他类!否则未来维护起来会一团乱麻。
举个例子,你不能让一个NPC既负责卖药水、又负责记录剧情进度、还要打怪……
那它真的不是 NPC,它是你!(被迫干活的主角x)
例子
假设你在做一个保存系统,你写了个 GameManager 类:
csharp
public class GameManager
{
public void SaveGame() { /* 保存游戏状态到文件 */ }
public void LoadGame() { /* 读取游戏状态 */ }
public void SwitchScene() { /* 切换场景 */ }
public void CalculateEnemyAI() { /* 敌人 AI 的判断 */ }
public void UpdateUI() { /* 更新界面 */ }
}gdscript
class_name GameManager
func save_game():
# 保存游戏状态到文件
func load_game():
# 读取游戏状态
func switch_scene():
# 切换场景
func calculate_enemy_ai():
# 敌人 AI 的判断
func update_ui():
# 更新界面虽然这个类叫 “管理器”,但它管得是不是有点太多了
这已经不是管理器,是世界管理员了
它承担了UI 控制、场景管理、AI 逻辑、存档功能等一堆职责,每一项都可能因为需求变更而修改这个类,
这种情况下,应该把这些拆开来,让每个类只管自己该管的那一块
csharp
public class SaveManager
{
public void SaveGame() {}
public void LoadGame() {}
}
public class SceneManager
{
public void SwitchScene() {}
}
public class EnemyAI
{
public void Calculate() {}
}
public class UIManager
{
public void UpdateUI() {}
}gdscript
class_name SaveManager
func save_game(): pass
func load_game(): pass
class_name SceneManager
func switch_scene(): pass
class_name EnemyAI
func calculate(): pass
class_name UIManager
func update_ui(): pass