设计模式_模板方法模式

模板方法模式

前言

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

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

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

介绍

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

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

不同年龄段的模特走秀
每个不同年龄段模特 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.mzph.cn/news/98355.shtml

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

相关文章

JAVA项目点赞功能如何实现?如何利用缓存优化?如何防止刷赞?

- 普通的点赞如何实现? - 每个人都见过点赞功能,大家想实现一个点赞功能也简单,比如一个简单的文章点赞逻辑如下: 首先需要建个表,记录下点赞人的id,被点赞文章的id,点赞状态三个关键因素即可&a…

【stm32芯片设置解惑】:stm32F103系列的开漏输出和推挽输出的区别

场景: 大家在开发stm32的时候,不管是标准库开发还是hal库开发,最基础的就是芯片引脚的某某设置,为什么这么设置?这样设置的好处是什么? 问题描述 — 开漏输出和推挽输出的用处和区别 什么是开漏输出&#x…

FPGA实现HDMI输入转SDI视频输出,提供4套工程源码和技术支持

目录 1、前言免责声明 2、我目前已有的SDI编解码方案3、设计思路框架核模块解析设计框图IT6802解码芯片配置及采集ADV7611解码芯片配置及采集silicon9011解码芯片配置及采集纯verilog的HDMI 解码模块RGB888转YUV422SPMTE编码SDI模式图像缓存SPMTE SDIGTXGV8500 4、vivado工程1-…

途虎养车上市、京东养车“震虎”,如何突围汽车后市场?

“汽车后市场第一股”终于来了! 赶在十一黄金周之前,途虎养车股份有限公司(09690.HK,下称“途虎养车”)于9月26日挂牌港交所,开盘价为28港元/股,与发行价持平;IPO首日报收29.50港元/股,涨幅5.3…

机器学习笔记 - 基于pytorch、grad-cam的计算机视觉的高级可解释人工智能

一、pytorch-gradcam简介 ​Grad-CAM是常见的神经网络可视化的工具,用于探索模型的可解释性,广泛出现在各大顶会论文中,以详细具体地描述模型的效果。Grad-CAM的好处是,可以在不额外训练的情况下,只使用训练好的权重即可获得热力图。 1、CAM是什么? CAM全称Class Activa…

在PyCharm中添加anaconda环境

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

asp.net电影院选座系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net电影院选座系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net电影院选座系统1 二、功能介…

记录极致CMS非富文本标签调用不改变格式

问题 在前台如何输出这三行是换行的 前台调用{$jz[hhl]}就变成这样了“这是第一行这是第二行这是第三行” 除了富文本还有没有什么可以实现这样的呢? 方法 {foreach explode("\n",$jz[hhl]) as $v} {if($v)} {$v} {/if} {/foreach}

航拍飞行器经营商城小程序的作用是什么

航拍人群越来越越多,一款靠谱的装备往往能达到预期效果,随着互联网信息传播度加深,也吸引了大批同样的爱好者加入航拍序列。 对航拍飞行器企业/经营商来说,市场增幅下也带来了不少商机,然在实际销售及客户赋能方面还是…

常用排序算法详解

1.冒泡排序原理示例代码实现 2.快速排序原理示例代码实现 3.插入排序原理示例代码实现 4.希尔排序原理示例代码实现 5.选择排序原理示例代码实现 6.堆排序原理示例代码实现 7.归并排序原理示例代码实现 本文讲述了常见的排序算法的执行过程,有详细实现过程举例 1.冒…

git+码云提交PR流程记录

前提条件:注册码云账号,本地安装git 如果不知道怎么注册和安装,可以参考gitgitee入门教程(https://bbs.huaweicloud.com/forum/thread-55222-1-1.html) 登录自己的码云账号 登陆了之后,在码云上打开目标项…

项目需求分析5大常见问题及解决方案

需求分析过程中,往往容易导致需求不准确和不完整,引起需求频繁变更,导致项目进度延误和成本增加;而需求分析的误解问题,导致交付产品无法满足客户期待,降低用户满意度和资源浪费。 那么在需求分析中&#x…

力扣第404题 左叶子之和 c++ 递归 与 迭代解法

题目 404. 左叶子之和 简单 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24示例 2: 输…

asp.net饭店订餐管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机设计定制

一、源码特点 asp.net 饭店订餐管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语 言开发 asp.net饭店订餐系统 二、功能介…

设计模式 - 访问者模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 访问者模式,即在不改变聚合对象内元素的前提下,为聚合对象内每个元素提供多种访问方式,即聚合对象内的每个元素都有多个访问者对象。访问者模式主要解决稳定的数据结构和易变元素的操作之间的…

Unity实现设计模式——策略模式

Unity实现设计模式——策略模式 策略模式是一种定义一些列算法的方法,这些所有的算法都是完成相同的工作,只是实现不同。它可以通过相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。 策略模式的 Strategy 类层次为 Contex…

放大招,百度文心大模型4.0正在加紧训练,即将发布

插播一条快讯! 刚刚看到一篇报道,说百度正在加紧训练文心大模型4.0!百度5月发布了文心大模型3.5,才4个多月又要发布4.0了,这迭代速度简直了。据说这次发布将在10月17日百度世界大会上进行&am…

NeurIPS 2023 | 李飞飞团队提出SiamMAE:孪生掩码自编码器,刷榜视觉自监督方法

在计算机视觉领域,想要建立图像和场景(scene)之间之间的对应关系是一项比较困难的任务,尤其是在存在遮挡、视角改变或是物体外观发生变化的情况下。 最近,斯坦福大学李飞飞团队对MAE进行扩展,提出了孪生掩…

Tensorflow入门之 Hello World

Tensorflow入门之 Hello World 简介 Tensorflow 是 Google 开源的深度学习框架,来自于 Google Brain 研究项目,在 Google 第一代分布式机器学习框架 DistBelief 的基础上发展起来。 Tensorflow 的官方网址 http://www.tensorflow.org Tensorflow 的 G…

基于边缘网关的智慧工地监测方案

边缘物联网技术为千行百业赋能,依托边缘计算的低延时、高效率、广适用优势,也为工程建设产业带来新的增长动力。 例如在智慧工地应用中,围绕建设施工过程中的人员、设备、环境等要素,利用边缘计算网关构建全面的数据采集、分析、联…