Unity23种设计模式之 模板方法模式

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();
相关推荐
是2的10次方啊1 天前
设计模式与生活⑲:投影连不上,别急着换投影仪
设计模式
cjz38992 天前
规则树:把一百行if-else拆成一棵树
设计模式
Adellle2 天前
设计模式指南 (Java 版) ㊁
java·开发语言·设计模式
是2的10次方啊2 天前
设计模式与生活⑱:工资还没焐热,账单已经凑成一摞
设计模式
百思不得小李3 天前
一个复杂的动态表单是如何实现的
前端·设计模式
爱你真是太好了3 天前
上下文组成以及如何压缩
设计模式
freejackman3 天前
【工程化】从“单兵作战”到“多引擎架构”:基于门面模式的重构实战
大数据·数据库·hive·sql·测试工具·设计模式·架构
Java成神之路-3 天前
从 if-else 到优雅解耦:策略 / 适配器 / 组合模式全流程实战
设计模式
是2的10次方啊4 天前
设计模式与生活⑰:空腹体检,单子领着人走
设计模式
是2的10次方啊4 天前
设计模式与生活⑯:天冷了,出门这身得一层层配
设计模式