返回杂谈
从手里剑看设计模式 — 工厂与策略
2026.07.20
✨ 心情:灵感迸发 💡
# 设计模式# 编程从手里剑看设计模式
忍者在战斗中会根据不同的敌人和距离选择不同种类的手里剑——风魔手里剑、普通十字手里剑、千本等等。这个选择过程其实完美体现了两种经典设计模式。
工厂模式:忍具制造班
在木葉村,忍具不是凭空出现的。有专门的忍具制造班负责生产各种规格的手里剑。
interface Shuriken {
name: string
damage: number
range: 'short' | 'medium' | 'long'
throw(): void
}
class ShurikenFactory {
static createShuriken(type: 'normal' | 'wind-demon' | 'senbon'): Shuriken {
switch (type) {
case 'normal':
return { name: '十字手里剑', damage: 10, range: 'medium', throw: () => {} }
case 'wind-demon':
return { name: '风魔手里剑', damage: 30, range: 'long', throw: () => {} }
case 'senbon':
return { name: '千本', damage: 5, range: 'short', throw: () => {} }
}
}
}
工厂模式让「制造」与「使用」解耦。忍者不需要知道手里剑是怎么打造的,只需要告诉工厂「我要什么类型」即可。
策略模式:战斗中的实时决策
当鸣人面对不同敌人时,他会根据情况选择不同的忍具策略:
interface BattleStrategy {
selectWeapon(distance: number, enemyType: string): Shuriken
}
class CloseRangeStrategy implements BattleStrategy {
selectWeapon(distance: number, enemyType: string): Shuriken {
return distance < 5
? ShurikenFactory.createShuriken('senbon')
: ShurikenFactory.createShuriken('normal')
}
}
class RangedStrategy implements BattleStrategy {
selectWeapon(distance: number, enemyType: string): Shuriken {
return ShurikenFactory.createShuriken('wind-demon')
}
}
策略模式的核心是:算法族可以互相替换,且替换独立于使用它们的客户端。就像忍者可以随时切换手里剑类型,而不需要改变投掷动作本身。
组合 > 继承
火影教给我们最重要的一课:没有人能独自变强。
设计模式也遵循同样的原则——组合优于继承。不是通过继承一个 Ninja 基类来实现所有功能,而是通过组合不同的策略、工厂、观察者等模式来构建灵活的系统。
木葉的每一位忍者都有自己的战斗风格,但他们都遵循相同的忍者守则。这就像团队中的每一位开发者——风格各异,但共享同一套设计模式的语言。
共勉 🍥