设计模式_模板方法模式

模板方法模式

前言

行为型设计模式 关注对象和行为的分离。

关于父类与子类 调用时候 具体调用的哪一个?

普通方法调用编译时决定左边决定
抽象/虚方法调用运行时决定右边决定

介绍

设计模式定义案例
模板方法模式父类 定义了业务流程,其中一部分
延迟到子类自己去完成
(通过虚方法/抽象方法)

和框架搭建很像:定义流程,实现了通用部分,可变部分传下去给子类

不同年龄段的模特走秀
每个不同年龄段模特 show的内容不同
其中小朋友年龄段的模特

上台后有特殊pose

问题堆积在哪里解决办法解释
show的内容不同
小朋友有特殊pose
父类中 定义了通用的流程

抽象方法其中: show的部分(必须有 所以用抽象)
虚函方法其中: 特殊pose部分(可有可无 所以用虚方法)
感觉:把类当做函数,其中虚方法/抽象方法
就是变量!

类图

代码例子

BaseModel

using UnityEngine;

public abstract class BaseModel
{
    public void Show()
    {
        // 上台
        Up();
        // 摆pose : 虚方法 有默认的pose 也可以
        Pose();
        // 开始show : 抽象方法不同的模特有不同的show过程
        Begin();
        // 下台
        Down();
    }

    // 开始 show
    public abstract void Begin();

    // 摆 Pose
    public virtual void Pose()
    {
        Debug.Log("Pose1");
    }

    private void Up()
    {
        Debug.Log("上台");
    }

    private void Down()
    {
        Debug.Log("下台");
    }
}

KidModel

using UnityEngine;

public class KidModel : BaseModel
{
    public override void Begin()
    {
        Debug.Log("小朋友模特开始 show!");
    }

    // 小朋友自己设计一个pose
    public override void Pose()
    {
        Debug.Log("我是可爱的天使!");
    }
}

AdultModel

using UnityEngine;

public class AdultModel : BaseModel
{
    public override void Begin()
    {
        Debug.Log("成年模特开始 Show!");
    }
}

OldModel

using UnityEngine;

public class OldModel : BaseModel
{
    public override void Begin()
    {
        Debug.Log("大龄模特开始show!");
    }
}

使用

using UnityEngine;

public class Emcee : MonoBehaviour
{
    void Start()
    {
        Debug.Log("---------------------------成年模特");
        {
            BaseModel model = new AdultModel();
            model.Show();
        }

        Debug.Log("---------------------------小孩模特");
        {
            BaseModel model = new KidModel();
            model.Show();
        }

        Debug.Log("---------------------------老年模特");
        {
            BaseModel model = new OldModel();
            model.Show();
        }
    }

}

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值