Spring 中的Template一次全理解,解析问题的本质

香菜聊游戏 发表于 2021/12/15 09:14:56 2021/12/15
【摘要】   在学习spring的过程中,经常能看到各种Template,如果能理解了这个的核心思想是不是一下就可以全部理解所有的Template,也就是掌握事情的本质,做到一通百通,再遇到类似的不会不理解,可以直接做知识迁移,今天来一起理解下1、设计模式之模板模式模板模式又叫模板方法模式,是定义问题的主要框架,流程,具体的详细实现留到子类,也就是定义了事情的规则,至于每个小部分在子类中可以自定义。留...

  在学习spring的过程中,经常能看到各种Template,如果能理解了这个的核心思想是不是一下就可以全部理解所有的Template,也就是掌握事情的本质,做到一通百通,再遇到类似的不会不理解,可以直接做知识迁移,今天来一起理解下

1、设计模式之模板模式


模板模式又叫模板方法模式,是定义问题的主要框架,流程,具体的详细实现留到子类,也就是定义了事情的规则,至于每个小部分在子类中可以自定义。留下大框架,保留灵活性。

模板模式使得子类可以在不改变算法结果的情况下,重新定义某些步骤,属于行为型设计模式。

模板模式适用于以下场景:

定义流程的不变部分,将可变的行为留给子类来实现。

抽象子类的公共行为,将公共的代码留在父类,将需要分别实现的放在子类,从而避免代码重复。

举个例子:

比如unity 和 cocos 现在的脚本,引擎内置了脚本的执行流程,开发人员根据游戏的需要实现具体的游戏行为。

下面以unity 为例

unity的模板类 是MonoBehaviour ,模板类中最常用的几个方法:

Awake:当一个脚本被实例化时,Awake 被调用。我们大多在这个类中完成成员变量的初始化。

Start:仅在 Update 函数第一次被调用前调用。因为它是在 Awake 之后被调用的,我们可以把一些需要依赖 Awake 的变量放在Start里面初始化。 同时我们还大多在这个类中执行 StartCoroutine 进行一些协程的触发。要注意在用C#写脚本时,必须使用 StartCoroutine 开始一个协程,但是如果使用的是 JavaScript,则不需要这么做。

Update:当开始播放游戏帧时(此时,GameObject 已实例化完毕),其 Update 在 每一帧 被调用。

LateUpdate:LateUpdate 是在所有 Update 函数调用后被调用。

FixedUpdate:当 MonoBehaviour 启用时,其 FixedUpdate 在每一固定帧被调用。

OnDestroy:当 MonoBehaviour 将被销毁时,这个函数被调用。

2、模板模式的优缺点


  优点:
利用模板模式将相同处理逻辑的代码放在抽象父类中,可以提高代码的复用性。

将不同的代码放到不同的子类中,通过对子类的扩展增加新的行为,可以提高代码的扩展性。

  缺点:
每个抽象类都需要一个子类实现,导致类的数量增加。

类数量的增加间接的增加了系统复杂性。

因为继承关系自身的缺点,如果父类添加新的抽象方法,所有子类都要改一遍。

3、spring中模板


在学习Spring的过程中,发现Spring封装的几个模板,这里罗列出来,便于对比学习。

SimpleJdbcTemplate 该模板已经过时,不做赘述

JDBCTemplate JDBCTemplate是Spring对JDBC的封装,开发人员自己写SQL,需要注入dataSource。

HibernateTemplate 使用HibernateTemplate不用关心底层的数据库是哪个数据库,直接操作对象,需要注入sessionFactory

NamedParameterJdbcTemplate

  也是基于JDBC的封装,不过在参数的书写上不使用?占位,而是使用:参数名的形式

5.RestTemplate是Spring提供的用于访问Rest服务的客户端

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率

6.AmqpTemplate

AmqpTemplate接口定义了发送和接收消息的所有基本操作

4、总结
Template定义了问题的边界,子类定义了具体的实现,只要在模板的范围内玩耍就可以了,就像唐僧站在孙悟空画的圈一样,在圈内保你安全,出了圈就有点危险了,今天的总结就到这,动动小手为我点个赞,谢谢你的支持

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。