设计模式_模板方法模式

模板方法模式

前言

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

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

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

介绍

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

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

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

上台后有特殊pose

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

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

类图

设计模式_模板方法模式_第1张图片

代码例子

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();
        }
    }

}

结果

设计模式_模板方法模式_第2张图片

你可能感兴趣的:(设计模式,设计模式,模板方法模式)