设计模式_模板方法模式

news2024/11/24 7:49:32

模板方法模式

前言

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

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

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

介绍

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

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

不同年龄段的模特走秀
每个不同年龄段模特 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();
        }
    }

}

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【韩顺平 零基础30天学会Java】面向对象编程(中级)

面向对象编程(基础)部分的习题还没看呢,先mark住!!! IDE(集成开发环境)- IDEA IDE(集成开发环境)- Eclipse idea设置字体和颜色主题:菜单 file -…

linux相关指令

一、ls 指令 语法:ls [选项] [目录或文件] 功能:对于目录,该命令列出目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d…

【单调栈】下一个更大元素 III

文章目录 Tag题目来源题目解读解题思路方法一:下一个排列 写在最后 Tag 【单调栈】【数组】【字符串】 题目来源 556. 下一个更大元素 III 题目解读 找出大于整数的最小整数,这个最小整数必须由原来整数中出现的数字组成。 解题思路 方法一&#xff…

冲刺第十五届蓝桥杯P0003倍数问题

文章目录 原题连接解析代码 原题连接 倍数问题 解析 需要找出三个数字,三个数字之和是k的倍数,并且这个数字需要最大,很容易想到的就是将数组进行倒叙排序,然后三层for循环解决问题,但是这样会导致**时间复杂度很高…

Appium问题及解决:打开Appium可视化界面,点击搜索按钮,提示inspectormoved

打开Appium可视化界面,点击搜索按钮,提示inspectorMoved,那么如何解决这个问题呢? 搜索了之后发现,由于高版本Appium(从1.22.0开始)的服务和元素查看器分离,所以还需要下载Appium In…

深入了解“注意力”和“变形金刚”-第2部分

一、说明 在上一个故事中,我已经解释了什么是注意力机制,以及与转换器相关的一些重要关键字和块,例如自我注意、查询、键和值以及多头注意力。 在这一部分中,我将解释这些注意力块如何帮助创建转换器网络,并详细

sed 命令

sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。 sed 命令是一个面向行处理的工具,它以“行”为处理单位,针对每一行进行处理,处理后的结果会输出到标准输出stdout。sed 命令是很懂礼貌的一个命令&…

CentOS 7 使用Docker

参考资料 Docker命令大全 黑马程序员docker实操教程 (黑马讲的真的不错 容器与虚拟机 安装 yum install -y docker Docker服务命令 启动服务 systemctl start docker停止服务 systemctl stop docker重启服务 systemctl restart docker查看docker服务状态 syste…

拨2个号时报错All TAP-Windows adapters on this system are currently in use.

管理员运行addtap.bat 可以看到,有两个TAP-Windows Adapter V9适配器了

拼多多API接口的使用方针如下:

了解拼多多API接口 拼多多API接口是拼多多网提供的一种应用程序接口,允许开发者通过程序访问拼多多网站的数据和功能。通过拼多多API接口,开发者可以开发各种应用程序,如店铺管理工具、数据分析工具、购物比价工具等。在本章中,我…

管易云与网易互客对接集成发货单查询2.0连通编辑订单(管易包裹物流=>互客销售订单物流(修改)V1)

管易云与网易互客对接集成发货单查询2.0连通编辑订单(管易包裹物流>互客销售订单物流(修改)V1) 来源系统:管易云 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站…

在PyCharm中添加anaconda环境

本文略过创建anaconda环境的部分~ 下文默认anaconda环境已经创建好 1. 点击新建项目 2. 1)修改项目名称 2)选择 “Previously configured interpreter” 曾经配置的解释器 3)选择“Add Interpreter” 添加新的解释器 3. 选择 “A…

外包干了2个月,技术退步明显....

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年…

javaee之Elasticsearch相关知识

简单说一下Elasticsearch相关知识 其余的参考官网文档 我们还可以用下面的方式来查 看一下原始索引库的模板 下面看一下数据库映射关系 下面就是更改了id1的所有数据 下面是我索引库中的内容 说一下查询之后,一些属性的含义 上面案例是这样理解的 match查询类型会对…

【微信小程序】初始微信小程序

🖥️🖥️🖥️ 博主主页: 👉🏻 👉🏻 👉🏻 糖 -O- 🚩🚩🚩微信小程序专栏:微信小程序 &…

设计模式再探——模板方法模式

目录 一、背景介绍二、思路&方案三、过程1.模板方法模式简介2.模板方法模式的类图3.模板方法模式代码4.模板方法模式中的父类为抽象类,为什么不是接口?5.模板方法模式中方法级别的单一职责 四、总结五、升华 一、背景介绍 最近公司在做颗粒业务的时…

关于Chrome浏览器打开某网页报 连接已重置 的解决方法

问题描述: Chrome浏览器(117版本)昨天打开内网站点正常,今天打开时报连接已重置,网页打不开。其他浏览器打开正常。 解决方案1:刷新DNS --- 失败 1、 打开命令行窗口 2、…

超简单的视频截取方法,迅速提取所需片段!

“视频可以截取吗?用相机拍摄了一段视频,但是中途相机发生了故障,录进去了很多不需要的片段,现在想截取一部分视频出来,但是不知道方法,想问问广大的网友,知不知道视频截取的方法。” 无论是工…

葡萄酒按名称分类保护的重要事件有哪些?

葡萄酒可以根据各种方法来进行分类,可以是原产地或称谓,可以是酿造方法和风格,可以是甜味和年份,也可以是使用的葡萄品种。来自云仓酒庄品牌雷盛红酒分享不同原籍国和地区对葡萄酒的分类做法各不相同,许多做法会随着时…

Linux 安装

本章节我们将为大家介绍 Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果自己不想搭建,也可以直接买一台学习用用. 本章节以 centos6.4 为例。 centos 下载地址: 可以去官网下载…