设计模式_模板方法模式

模板方法模式

前言

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

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

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

介绍

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

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

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

上台后有特殊pose

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

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

类图

代码例子

BaseModel

using UnityEngine;public abstract class BaseModel
{public void Show(){// 上台Up();// 摆pose : 虚方法 有默认的pose 也可以Pose();// 开始show : 抽象方法不同的模特有不同的show过程Begin();// 下台Down();}// 开始 showpublic abstract void Begin();// 摆 Posepublic 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!");}// 小朋友自己设计一个posepublic 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.hqwc.cn/news/127772.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.2.3 vim操作合集

1 vim VIM 是 Linux 系统上一款文本编辑器,学习 VIM 最好的文档,应该是阅读学习 VIM 的帮助文档,可以使用本地的帮助文件(vim--->:help),或者使用在线帮助文档。同时针对vim的使用,相应的相书籍也很多,如下 2 vim操作模式 命令模式:默认模式,该模式下可以移动光标…

One Thread One Loop主从Reactor模型⾼并发服务器

One Thread One Loop主从Reactor模型⾼并发服务器 文章目录 One Thread One Loop主从Reactor模型⾼并发服务器一些补充HTTP服务器Reactor 模型eventfd通用类Any 目标功能模块划分:SERVER模块Buffer模块:编写思路:接口设计:具体实现…

“新”国货@2023:质疑、回归与转机

【潮汐商业评论/ 原创】 “我是真爱买国货,上到冰箱电视洗衣机,这样的家电大件儿,下到日化洗护用品,这样的日常小件儿,统统首选国货品牌,也只考虑国货品牌。”此时此刻,Grace正与大家分享着自己…

点餐小程序实战教程06-首页开发

用户注册功能开发好了之后,我们就要开发小程序,首先我们是规划小程序的功能模块,我们一共是四个模块,分别是首页、订单、消息和我的。 首页我们主要是点餐的功能,可以选择菜品,加入到购物车,然…

【微信小程序开发】宠物预约医疗项目实战-登录实现

【微信小程序开发】宠物预约医疗项目实战-登录实现 第二章 宠物预约医疗项目实战-注册实现 文章目录 【微信小程序开发】宠物预约医疗项目实战-登录实现前言一、打开项目文件二、编写代码2.1 wxss代码编写2.2 wxml代码编写2.3 js代码编写2.3.1 登录接口获取: 2.4 j…

【uniapp】小程序开发6:自定义状态栏

一、自定义状态栏 可以设置某个页面的状态栏自定义或者全局状态栏自定义。 这里以首页状态栏为例。 1)pages.json 中配置"navigationStyle": "custom",代码如下: {"pages": [ {"path": "pa…

数据结构与算法(六):堆

参考引用 Hello 算法 Github:hello-algo 1. 堆 堆(heap)是一种满足特定条件的完全二叉树,主要可分为下图所示的两种类型 小顶堆 min heap:任意节点的值 ≤ 其子节点的值大顶堆 max heap:任意节点的值 ≥ 其…

使用Docker安装JupyterHub

安装JupyterHub 拉取Jupyter镜像并运行容器 docker run -d -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub jupyterhub # -d:后台运行 # -p 8000:8000:宿主机的8000端口映射容器中的8000端口 # --name jupyterhub:给运行的容器起名…

漏洞复现--中远麒麟堡垒机SQL注入

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

轻量级接口自动化测试框架

大致思路: jmeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用jenkins完成脚本的自动集成运行. 环境安装: 1.jdk1.7 配置环境变量(参考前面的分页) 2.jmeter解压到本地,ant解压到本地 3.Ant解压到本地,并配置环境变量 ANT_HOME:D:\jmeter\apache-ant-1.9.6 P…

flutter开发实战-inappwebview实现flutter与Javascript的交互JSBridge

flutter开发实战-inappwebview实现flutter与Javascript的交互JSBridge 在使用webview中,需要实现flutter与Javascript交互,在使用webview_flutter插件的时候,整理了一下webview与Javascript的交互JSBridge,具体可以查看 https:/…

计算机竞赛 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 🔥 优…