当前位置: 首页 > news >正文

Unity 虚拟仿真实验中设计模式的使用 ——策略模式(Strategy Pattern)

📖 目录

  1. 前言

  2. 什么是策略模式

  3. 案例背景:虚拟仿真实验中的加热策略

  4. 案例效果图(示意)

  5. 代码实现

    • 5.1 策略接口:IHeatingStrategy

    • 5.2 具体策略类:SlowHeating / FastHeating / MicrowaveHeating

    • 5.3 上下文类:WaterHeaterContext

    • 5.4 UI 控制:策略选择按钮

  6. 运行流程

  7. 注意事项总结

  8. 扩展思考

  9. 总结


1. 前言

在虚拟仿真实验中,同一个实验对象可能会有 多种行为算法,例如:

  • 水加热可以有慢加热、快速加热、微波加热等不同策略

  • 药剂混合可能有不同混合公式

  • 仪器测量可能有不同精度模式

如果用大量 if-else 或 switch 选择算法,会导致代码难以扩展。

策略模式(Strategy Pattern) 能将算法封装成独立类,在运行时灵活切换。


2. 什么是策略模式

策略模式:定义一系列算法,把每个算法封装起来,并使它们可互换,策略模式让算法独立于使用它的客户端变化。

优点

  • 算法独立,易扩展

  • 客户端无需知道具体实现

  • 可动态切换行为


3. 案例背景:虚拟仿真实验中的加热策略

  • 实验对象:水壶

  • 加热策略:

    1. SlowHeating:慢速升温

    2. FastHeating:快速升温

    3. MicrowaveHeating:微波加热

  • 用户可选择加热策略,水温变化逻辑由策略决定


4. 案例效果图(示意)

[慢速加热按钮] → 水温缓慢升高
[快速加热按钮] → 水温快速升高
[微波加热按钮] → 水温瞬间升高

5. 代码实现

5.1 策略接口:IHeatingStrategy

public interface IHeatingStrategy
{float Heat(float currentTemperature, float deltaTime);
}

5.2 具体策略类

慢速加热

using UnityEngine;public class SlowHeating : IHeatingStrategy
{public float Heat(float currentTemperature, float deltaTime){return currentTemperature + 5f * deltaTime; // 每秒升温5℃}
}

快速加热

using UnityEngine;public class FastHeating : IHeatingStrategy
{public float Heat(float currentTemperature, float deltaTime){return currentTemperature + 15f * deltaTime; // 每秒升温15℃}
}

微波加热

using UnityEngine;public class MicrowaveHeating : IHeatingStrategy
{public float Heat(float currentTemperature, float deltaTime){return currentTemperature + 50f * deltaTime; // 每秒升温50℃}
}

5.3 上下文类:WaterHeaterContext

using UnityEngine;public class WaterHeaterContext : MonoBehaviour
{public float Temperature { get; private set; } = 20f;private IHeatingStrategy heatingStrategy;public void SetStrategy(IHeatingStrategy strategy){heatingStrategy = strategy;Debug.Log($"当前加热策略:{strategy.GetType().Name}");}private void Update(){if (heatingStrategy != null){Temperature = heatingStrategy.Heat(Temperature, Time.deltaTime);Debug.Log($"水温:{Temperature:F1}℃");}}
}

5.4 UI 控制:策略选择按钮

using UnityEngine;
using UnityEngine.UI;public class HeatingUI : MonoBehaviour
{[SerializeField] private Button slowButton;[SerializeField] private Button fastButton;[SerializeField] private Button microwaveButton;[SerializeField] private WaterHeaterContext waterHeater;private void Start(){slowButton.onClick.AddListener(() =>waterHeater.SetStrategy(new SlowHeating()));fastButton.onClick.AddListener(() =>waterHeater.SetStrategy(new FastHeating()));microwaveButton.onClick.AddListener(() =>waterHeater.SetStrategy(new MicrowaveHeating()));}
}

6. 运行流程

  1. 初始水温 20℃

  2. 玩家点击策略按钮 → 设置不同加热策略

  3. Update() 调用策略类的 Heat() 方法计算温度

  4. UI 或日志显示实时温度

  5. 可随时切换策略 → 水温变化行为动态改变


7. 注意事项总结

  • 策略类单一职责:每个策略只关心自己的计算逻辑

  • 上下文类只调用策略方法,不包含具体算法

  • 动态切换策略:通过 SetStrategy() 灵活切换


8. 扩展思考

  • 可以结合 观察者模式,策略变化通知 UI/日志

  • 可以结合 状态模式,根据温度切换 Idle / Heating / Boiling

  • 可以做 策略组合,如混合加热策略(慢+微波)


9. 总结

通过这个虚拟仿真案例,你学会了:

  • 使用 策略模式 动态切换实验对象行为

  • 将算法封装成独立类,易于维护与扩展

  • 与状态模式、观察者模式结合,可构建完整实验仿真框架

👉 策略模式在虚拟实验中非常适合多行为、多算法选择的场景,让实验逻辑清晰且易于扩展。

http://www.dtcms.com/a/409853.html

相关文章:

  • 企业级网站欣赏新乡个人网站建设
  • 设计模式——单例模式
  • C++设计模式之结构型模式:外观模式(Facade)
  • PaddleX服务化部署精度低于命令行调用的原因及解决方案
  • 新型域名前置攻击利用Google Meet、YouTube、Chrome及GCP构建流量隧道
  • 使用 C# 设置 Excel 单元格数据验证
  • python 做 网站移动互联网终端设备的主要技术指标是什么
  • Claude Code 的“AI优先”
  • 海外网站推广的公司app开发者需要更新
  • Unity-状态机复用
  • 沈阳铁西做网站公司成都移动网站建设
  • AI提示词应用
  • 【汽车篇】AI深度学习在汽车零部件外观检测——机电轴承的应用
  • 智能网联汽车技术仿真教学软件-沉浸式学习,实战化训练
  • 深圳市网站备案百度seo哪家公司好
  • 商城网站主机在线制作论坛网站
  • 网站建设扌金手指六六wordpress开源可视化编辑
  • SpringData
  • linux docker 离线 安装
  • MyBatis常见面试题
  • Docker(一)—— Docker入门到精通:从基础概念到容器管理
  • python(44) : docker compose基于基础镜像部署python服务
  • VMware+RockyLinux+ikuai+docker+cri-docker+k8s+calico BGP网络 自用 实践笔记(四)
  • 深入理解 Docker:从入门到实践
  • 实战排查:Java 解析 Excel 大型 导致内存溢出问题的完整解决过程
  • 【实录】使用 Verdaccio 从零搭建私有 npm 仓库(含完整步骤及避坑指南)
  • 物联网人体红外检测系统详解
  • 关于Unix Domain Socket的使用入门
  • 机器视觉系统中工业相机的常见类型及其特点、应用
  • RTT操作系统(4)