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

企业网站如何做架构图天津seo排名费用

企业网站如何做架构图,天津seo排名费用,织梦系统seo网站模板,【网站建设文章目录 🧩 模板方法模式(Template Method Pattern)深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码(关卡流程系统)1. 定义抽象模板类2. 实现具体子类3. 客户端使用 四、模式进阶技巧1. 钩子方法&am…

文章目录

      • 🧩 模板方法模式(Template Method Pattern)深度解析
        • 一、模式本质与核心价值
        • 二、经典UML结构
        • 三、Unity实战代码(关卡流程系统)
          • 1. 定义抽象模板类
          • 2. 实现具体子类
          • 3. 客户端使用
        • 四、模式进阶技巧
          • 1. 钩子方法(Hook)
          • 2. 阶段状态控制
          • 3. 异步加载优化
        • 五、游戏开发典型应用场景
        • 六、性能优化策略
        • 七、模式对比与选择
        • 八、最佳实践原则
        • 九、常见问题解决方案

🧩 模板方法模式(Template Method Pattern)深度解析

——以Unity实现标准化游戏流程灵活AI行为框架为核心案例


一、模式本质与核心价值

核心目标
定义算法骨架,将某些步骤延迟到子类实现
复用算法结构,确保流程一致性
避免代码冗余,通过继承实现差异化

关键术语

  • AbstractClass(抽象类):定义模板方法和抽象操作
  • ConcreteClass(具体子类):实现抽象操作的具体逻辑
  • Template Method(模板方法):定义算法的步骤序列

数学表达
设算法流程为:A → B → C → D
模板方法确保所有子类遵循此流程,但允许自定义B和C的实现


二、经典UML结构
«abstract»
GameLevel
+LoadLevel()
+Initialize()
+StartLevel()
+EndLevel()
+PlayLevel()
BossLevel
+Initialize()
+StartLevel()
+EndLevel()
PuzzleLevel
+Initialize()
+StartLevel()
+EndLevel()

三、Unity实战代码(关卡流程系统)
1. 定义抽象模板类
public abstract class GameLevel : MonoBehaviour {// 模板方法(不可重写)public sealed override IEnumerator PlayLevel() {LoadLevelAssets();yield return InitializeLevel();yield return StartLevelCore();yield return EndLevelProcess();Cleanup();}// 具体步骤(部分有默认实现)protected virtual void LoadLevelAssets() {Debug.Log("加载基础资源...");// 加载公共资源逻辑}protected abstract IEnumerator InitializeLevel();protected abstract IEnumerator StartLevelCore();protected virtual IEnumerator EndLevelProcess() {Debug.Log("执行默认结算流程...");yield return new WaitForSeconds(1);}protected virtual void Cleanup() {Debug.Log("清理临时资源...");}
}
2. 实现具体子类
// BOSS关卡
public class BossLevel : GameLevel {[SerializeField] private GameObject _bossPrefab;protected override IEnumerator InitializeLevel() {Debug.Log("生成BOSS...");Instantiate(_bossPrefab);yield return new WaitForSeconds(2);}protected override IEnumerator StartLevelCore() {Debug.Log("开始BOSS战!");// BOSS战斗逻辑yield return new WaitUntil(() => !IsBossAlive());}private bool IsBossAlive() {// 检测BOSS存活状态return true;}
}// 解谜关卡
public class PuzzleLevel : GameLevel {[SerializeField] private PuzzleSystem _puzzle;protected override IEnumerator InitializeLevel() {Debug.Log("初始化谜题组件...");_puzzle.ResetPuzzle();yield return null;}protected override IEnumerator StartLevelCore() {Debug.Log("启动谜题...");yield return new WaitUntil(() => _puzzle.IsSolved);}protected override IEnumerator EndLevelProcess() {yield return base.EndLevelProcess();Debug.Log("展示解谜奖励...");yield return new WaitForSeconds(2);}
}
3. 客户端使用
public class LevelManager : MonoBehaviour {[SerializeField] private GameLevel _currentLevel;void Start() {StartCoroutine(PlayCurrentLevel());}private IEnumerator PlayCurrentLevel() {yield return _currentLevel.PlayLevel();Debug.Log("关卡流程结束!");}public void SwitchLevel(GameLevel newLevel) {_currentLevel = newLevel;StartCoroutine(PlayCurrentLevel());}
}

四、模式进阶技巧
1. 钩子方法(Hook)
protected virtual bool ShouldSkipIntro() => false;public sealed override IEnumerator PlayLevel() {if(!ShouldSkipIntro()) {yield return PlayIntroAnimation();}// 后续流程...
}
2. 阶段状态控制
public abstract class GameLevel : MonoBehaviour {private enum LevelState { Loading, Initializing, Running, Ending }private LevelState _currentState;protected void SetState(LevelState newState) {_currentState = newState;OnStateChanged?.Invoke(newState);}public event Action<LevelState> OnStateChanged;
}
3. 异步加载优化
protected virtual async Task LoadLevelAssetsAsync() {var loadOp = Addressables.LoadAssetsAsync<GameObject>("LevelBaseAssets");await loadOp.Task;Debug.Log($"已加载 {loadOp.Result.Count} 个基础资源");
}

五、游戏开发典型应用场景
  1. 角色行为模板

    public abstract class CharacterBehavior {public void ExecuteDailyRoutine() {WakeUp();Eat();Work();Sleep();}protected abstract void Work();// 其他步骤可有默认实现...
    }
    
  2. 技能释放流程

    public abstract class SkillBase {public void Cast() {PlayCastAnimation();ApplyPreEffects();ExecuteCoreLogic();ApplyPostEffects();}protected abstract void ExecuteCoreLogic();
    }
    
  3. UI面板通用流程

    public abstract class UIPanel : MonoBehaviour {public IEnumerator Show() {PreShowSetup();yield return PlayShowAnimation();PostShowInitialize();}protected virtual void PreShowSetup() { /* 默认空实现 */ }protected abstract IEnumerator PlayShowAnimation();
    }
    
  4. 敌人生成系统

    public abstract class EnemySpawner {public void SpawnWave() {PreSpawnCheck();CalculateSpawnPoints();SpawnEnemies();PostSpawnActions();}protected abstract void SpawnEnemies();
    }
    

六、性能优化策略
策略实现方式适用场景
预编译模板使用泛型模板类高频实例化场景
步骤缓存缓存重复计算结果复杂初始化流程
分帧执行使用协程分步骤执行长耗时流程
资源预加载提前加载共用资源资源密集型关卡

七、模式对比与选择
维度模板方法模式策略模式
代码复用方式继承组合
灵活性修改需要继承运行时动态切换
适用场景固定流程算法可替换算法模块
扩展方向垂直扩展(子类化)水平扩展(新增策略)

八、最佳实践原则
  1. 模板方法密封:防止子类修改算法骨架
    public sealed override void ExecuteProcess() { /* ... */ }
    
  2. 合理使用虚方法:提供默认实现而非强制重写
  3. 控制继承层级:建议不超过3层继承
  4. 文档注释:明确说明各步骤职责
    /// <summary>
    /// 初始化关卡核心元素,必须由子类实现
    /// </summary>
    protected abstract void InitializeCore();
    

九、常见问题解决方案

Q1:如何避免过度继承?
→ 使用组合+模板方法混合模式

public class LevelProcessor {private ILevelInitializer _initializer;private ILevelFinalizer _finalizer;public void ExecuteProcess() {LoadCommonAssets();_initializer.Initialize();RunCoreLogic();_finalizer.Finalize();}
}

Q2:如何处理跨步骤状态共享?
→ 使用上下文对象传递数据

public class LevelContext {public int Score;public float TimeSpent;public List<Enemy> AliveEnemies = new();
}protected abstract void ExecuteCore(LevelContext context);

Q3:如何调试多层级模板?
→ 实现步骤追踪器

public abstract class DebuggableTemplate : MonoBehaviour {private void LogStep(string message) {Debug.Log($"[{Time.time:F2}] {GetType().Name} - {message}");}protected sealed override void LoadResources() {LogStep("开始加载资源");base.LoadResources();LogStep("资源加载完成");}
}

上一篇 【行为型之策略模式】游戏开发实战——Unity灵活算法架构的核心实现策略
下一篇 【行为型之访问者模式】游戏开发实战——Unity灵活数据操作与跨系统交互的架构秘诀

http://www.dtcms.com/wzjs/538065.html

相关文章:

  • 邮箱账号做网站用户名好不好wordpress用win还是Linux
  • 站外seo是什么在唐山做网站多少钱
  • 为什么菜市场不可以做网站浙江省建设质量协会网站
  • 万网怎么上传网站评价一个网站设计项目的好坏
  • 深圳商业网站建设去哪家网站建设公司伟置
  • 网站建设英文江苏省宝应城市建设有限公司网站
  • 百度网站公司信息推广怎么做的三峡建设管理有限公司网站
  • 深圳建设网站公电商网站建设基础教案
  • 个人网站备案名字不同查看自己网站访问量
  • 阜阳哪里做网站网页的设计流程是怎样的
  • 面包屑网站导航怎么做怎么创建属于自己的平台
  • 网站推广风险做图必备素材网站
  • 建设英文网站的必要性内容型网站的运营
  • 中国石油天然气第六建设公司网站永久免费域名申请
  • 网站广告赚钱大企业网站建设公司
  • 婚礼婚庆网站建设需求分析网站建设所有权
  • 个人域名 做公司网站松江泗泾网站建设
  • 天下网商自助建站系统廊坊seo关键词排名
  • 可以做宣传的网站做关键字要改网站
  • 大良网站建设dwxw废旧物品手工制作图片
  • 互动科技 网站建设网页设计师考证
  • 九江做网站的wordpress摘要字数的插件
  • 淘宝客做销量的网站有哪些视频网站要多大虚拟主机
  • 自已做网站北京中国建设工程造价管理协会网站
  • 西安集团网站建设珠海制作企业网站
  • 绿色食品网站建设可行性苏州建设工程招标在哪个网站
  • 两学一做网站专栏怎么设置电子商务网站建设实训作业
  • 中学网站建设 课设做门户网站找哪家公司
  • t型布局网站实例建门户网站哪家最好
  • 做网站的启蒙思想美食网页制作