1.什么是模板方法模式?
核心思想:在父类中定义算法的骨架流程,将某些步骤延迟到子类中实现。
2.实战实例:UI窗口打开流程
项目中所有UI窗口打开流程基本一致:
(1)加载资源
(2)初始化数据
(3)绑定事件
(4)播放打开动画
但是 每个窗口的数据初始化不同、事件绑定不同、动画可能不一样
3.代码演示
cs
public abstract class UIWindow
{
// 模板方法:定义整体流程
public void Open()
{
LoadAsset();
InitData();
BindEvent();
PlayOpenAnim();
}
protected virtual void LoadAsset()
{
Debug.Log("加载UI资源");
}
// 必须由子类实现
protected abstract void InitData();
protected abstract void BindEvent();
// Hook:子类可选覆盖
protected virtual void PlayOpenAnim()
{
Debug.Log("播放默认打开动画");
}
}
具体窗口实现
cs
public class BagWindow : UIWindow
{
protected override void InitData()
{
Debug.Log("初始化背包数据");
}
protected override void BindEvent()
{
Debug.Log("绑定背包按钮事件");
}
protected override void PlayOpenAnim()
{
Debug.Log("播放背包弹出动画");
}
}
cs
public class ShopWindow : UIWindow
{
protected override void InitData()
{
Debug.Log("初始化商店商品列表");
}
protected override void BindEvent()
{
Debug.Log("绑定购买按钮事件");
}
}
使用
cs
UIWindow window = new BagWindow();
window.Open();