找回密码
 立即注册
首页 业界区 业界 Rust修仙之道 第十一章 构型境 · 设计模式之道 ...

Rust修仙之道 第十一章 构型境 · 设计模式之道

申屠梓彤 2025-7-11 07:47:15
第十一章:构型境 · 设计模式之道

“千术可构,格局需明;结构得法,道可延年。”
顾行云正式承担“魂核驱动阵”的重构之任,发现需求纷繁、参数繁多、状态变化复杂。传统术式难以胜任,他遂投身于构型殿修行,悟得三种典范设计法术。
一、建造之术 · Builder Pattern

用于灵术属性繁多、创建步骤复杂的情况
症状:构建灵器时参数众多、混乱:
  1. let blade = SoulBlade {
  2.     name: String::from("斩灵"),
  3.     element: Some(Element::Fire),
  4.     weight: None,
  5.     enchant_level: Some(3),
  6. };
复制代码
太难维护,灵力失衡……
Builder 解法:
  1. struct SoulBlade {
  2.     name: String,
  3.     element: Option<Element>,
  4.     enchant_level: Option<u32>,
  5. }
  6. struct SoulBladeBuilder {
  7.     blade: SoulBlade,
  8. }
  9. impl SoulBladeBuilder {
  10.     fn new(name: &str) -> Self {
  11.         Self { blade: SoulBlade {
  12.             name: name.to_string(),
  13.             element: None,
  14.             enchant_level: None,
  15.         }}
  16.     }
  17.     fn element(mut self, e: Element) -> Self {
  18.         self.blade.element = Some(e);
  19.         self
  20.     }
  21.     fn enchant_level(mut self, lv: u32) -> Self {
  22.         self.blade.enchant_level = Some(lv);
  23.         self
  24.     }
  25.     fn build(self) -> SoulBlade {
  26.         self.blade
  27.     }
  28. }
复制代码
使用:
  1. let blade = SoulBladeBuilder::new("焰牙")
  2.     .element(Element::Fire)
  3.     .enchant_level(2)
  4.     .build();
复制代码
“构建之术,柔中带钢;既可明确流程,又不扰主结构。”
二、策略之术 · Strategy Pattern

用于行为可变、规则常换的灵法模块
顾行云设计“伤害计算系统”,不同灵兽使用不同算法:
  1. trait DamageStrategy {
  2.     fn calculate(&self, base: u32) -> u32;
  3. }
  4. struct FireDamage;
  5. impl DamageStrategy for FireDamage {
  6.     fn calculate(&self, base: u32) -> u32 { base + 20 }
  7. }
  8. struct IceDamage;
  9. impl DamageStrategy for IceDamage {
  10.     fn calculate(&self, base: u32) -> u32 { base + 10 }
  11. }
复制代码
召唤统一接口:
  1. fn apply_damage(s: &dyn DamageStrategy, base: u32) {
  2.     println!("最终伤害:{}", s.calculate(base));
  3. }
复制代码
“策略可换,接口不改。既统则固,可换则柔。”
三、状态之术 · State Pattern

适用于灵器/咒术状态多变、切换行为不同之术
顾行云构建“法术卷轴”,可处于三种状态:未解封、激活中、冷却中
设计如下:
  1. trait ScrollState {
  2.     fn use_scroll(&self) -> Box<dyn ScrollState>;
  3. }
  4. struct Sealed;
  5. struct Active;
  6. struct Cooldown;
  7. impl ScrollState for Sealed {
  8.     fn use_scroll(&self) -> Box<dyn ScrollState> {
  9.         println!("解封卷轴!");
  10.         Box::new(Active)
  11.     }
  12. }
  13. impl ScrollState for Active {
  14.     fn use_scroll(&self) -> Box<dyn ScrollState> {
  15.         println!("施术完成,进入冷却。");
  16.         Box::new(Cooldown)
  17.     }
  18. }
  19. impl ScrollState for Cooldown {
  20.     fn use_scroll(&self) -> Box<dyn ScrollState> {
  21.         println!("卷轴冷却中,无法使用。");
  22.         Box::new(Cooldown)
  23.     }
  24. }
  25. struct SpellScroll {
  26.     state: Box<dyn ScrollState>,
  27. }
  28. impl SpellScroll {
  29.     fn new() -> Self {
  30.         Self { state: Box::new(Sealed) }
  31.     }
  32.     fn activate(&mut self) {
  33.         self.state = self.state.use_scroll();
  34.     }
  35. }
复制代码
“术随境迁,道应时通。”
构型心法

术有形者,必有格局;格局清明者,方可纳万变。
⬅️ 上一章            [下一章 待续➡️]


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册