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

自己做网站花钱么百度识图 上传图片

自己做网站花钱么,百度识图 上传图片,模板网站如何建设,成都app开发外包文章目录 🧩 模板方法模式(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/360037.html

相关文章:

  • 网站定制开发百度搜索引擎算法
  • 做公众号必了解的网站cfa一级看多久两分钟
  • 网站建设收费报价表广州seo排名外包
  • 专业免费网站建设一键关键词优化
  • 做网站的视频教程济南网站设计
  • 创意设计字体seo网站诊断顾问
  • win2008做网站全网网络营销
  • 网站制作和如何推广搜索引擎分哪三类
  • 网站建设制作设计推广灰色广告投放平台
  • 重庆网站建设哪家好wordpress企业网站模板
  • 深圳网站开发教程上海网络推广招聘
  • linux可以做网站开发吗公司广告推广
  • 部门网站建设工作总结网络推广的几种方式
  • 江苏网站建设公司优化服务内容
  • wordpress构架都是模板seo顾问培训
  • 做网站敲代码的图片今日国际新闻大事件
  • 消防中队网站建设产品线上推广方式都有哪些
  • 自己做的网站如何赚钱吗做一个电商平台大概需要多少钱
  • 外贸网站优化怎么做怎样做百度推广网页
  • 网站开发技术孵化今日头条十大新闻最新
  • 如何做微信网站建设淘宝seo软件
  • wordpress.com 域名网站seo博客
  • 建设综合信息网站需要多少钱网络舆情监测系统
  • 保洁产品网站建设价格郑州网站建设推广
  • 网业有限公司班级优化大师怎么下载
  • 宁夏快速自助制作网站厦门seo服务
  • 网站备案 快速seo搜索引擎优化试题及答案
  • 做设计的网站定制免费推广软件
  • 新蔡哪有做网站建设的手机百度搜索引擎
  • 网站设计与开发怎么做免费国外ddos网站