点击上方 "编程技术圈"关注, 星标或置顶一起成长

后台回复“大礼包”有惊喜礼包!

日英文

Do not deliberately pursue certain things, falling leaves, belongs to me, it'll always be back.

不去刻意追求某些东西,落叶归根,属于我的,它总会回来。

每日掏心话

风还是一样的吹,花还是一样地开,我相信所谓的命运不过是一个人的生理,心理,情感,性格等等因素所造成的一个人行动的最终结果。

责编:乐乐 | 来自:叁滴水链接:blog.csdn.net/qq_30285985/

编程技术圈(ID:study_tech)第 1198 次推文

往日回顾:推荐一个高仿微信的项目 有点屌!!

     

   正文   

前言假如开一把lol,必须要做哪些事呢?可以简化位这三个步骤。选择英雄,开始游戏,投降。这三个步骤必须按照顺序执行。映射到代码中可以想到socket信息传输,建立连接,传输数据,关闭连接。
这就是模板模式了大概的样子,在模板模式中,一个抽象类公开定义了执行它的方法的方式模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
比如玩一把lol,选择什么英雄都可以,开始游戏后,每个人也有自己的发育路线,最后是15分钟投降,还是20分钟投降,每一局也都不一定(赢了暂时不算)不管谁来玩, 都要遵循这个路线。
一、lol案例通过玩一盘游戏来初步了解下模板模式。
代码如下(游戏步骤):
public interface PlaylolGame {//选择英雄void selectHero();//开始游戏void startGame();//游戏结束void GameOver();
}
代码如下(玩游戏模板):通过play()方法来固定玩游戏的顺序。通过传入接口来让不同的玩家来实现。
public class PlayGameTemplate {private PlaylolGame playlolGame;public PlayGameTemplate(PlaylolGame playlolGame) {this.playlolGame = playlolGame;}public void play(){playlolGame.selectHero();playlolGame.startGame();playlolGame.GameOver();}
}
代码如下(德玛玩家的玩法):
public class PlayGailun implements PlaylolGame {@Overridepublic void selectHero() {System.out.println("人在塔在!~");}@Overridepublic void startGame() {System.out.println("草丛阴一下,一个Q沉默,转两圈,一个大招带走!~");}@Overridepublic void GameOver() {System.out.println("汗,队友太坑,20分投了~~");}
}
代码如下(剑豪的玩法):
public class PlayJifengjianhao implements PlaylolGame {@Overridepublic void selectHero() {System.out.println("长路漫漫,唯剑作伴!~");}@Overridepublic void startGame() {System.out.println("哈撒给!~,快了起来!~");}@Overridepublic void GameOver() {System.out.println("汗,队友太坑,25分投了~~");}
}
代码如下(入口):
public class Test {public static void main(String[] args) {//德玛玩家PlayGameTemplate playGame = new PlayGameTemplate(new PlayGailun());playGame.play();//剑豪玩家PlayGameTemplate jianhao = new PlayGameTemplate(new PlayJifengjianhao());jianhao.play();}/*** 人在塔在!~* 草丛阴一下,一个Q沉默,转两圈,一个大招带走!~* 汗,队友太坑,20分投了~~* -----------------------* 长路漫漫,唯剑作伴!~* 哈撒给!~,快了起来!~* 汗,队友太坑,25分投了~~*/
}
这样既可实现,不管谁来玩这个游戏,都要来按照这个步骤来玩。最新 Java 核心技术教程,推荐看下。
二、jdbc案例在真实的情况中并不一定会遇到玩游戏的案例,但是jdbc连接的案例肯定会遇到。每次数据库都要设置连接信息。就是DataSource这个接口,这个接口是javax.sql包下的,是jdk带的接口,意思是说哪种数据库想通过java语言进行连接,就要实现DataSource这个官方的接口。
比如如果引入mysql的驱动,那么就会有一个MysqlDataSource实现了DataSource这个接口。
JdbcTemplate有一个传入DataSource的的构造方法。
代码如下:
private DataSource dataSource;public JdbcTemplate(DataSource dataSource) {this.setDataSource(dataSource);this.afterPropertiesSet();
}
通过构造方法来设置DataSource的实现。设置完成之后,即可使用JdbcTemplate,最多的方法可能就是execute方法。
代码如下:现在暂且把代码分为3步,1.建立连接,2传输信息,3关闭连接。
public <T> T execute(StatementCallback<T> action) throws DataAccessException {Assert.notNull(action, "Callback object must not be null");//1 获取连接,通过con来接收连接信息Connection con = DataSourceUtils.getConnection(this.getDataSource());Statement stmt = null;Object var7;try {Connection conToUse = con;if(this.nativeJdbcExtractor != null && this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {conToUse = this.nativeJdbcExtractor.getNativeConnection(con);}stmt = conToUse.createStatement();this.applyStatementSettings(stmt);Statement stmtToUse = stmt;if(this.nativeJdbcExtractor != null) {stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);}//2 传输并且接收返回的信息T result = action.doInStatement(stmtToUse);this.handleWarnings(stmt);var7 = result;} catch (SQLException var11) {JdbcUtils.closeStatement(stmt);stmt = null;DataSourceUtils.releaseConnection(con, this.getDataSource());con = null;throw this.getExceptionTranslator().translate("StatementCallback", getSql(action), var11);} finally {//3.关闭连接JdbcUtils.closeStatement(stmt);DataSourceUtils.releaseConnection(con, this.getDataSource());}return var7;
}
由以上代码发现,不管使用mysql还是Oracle,如果想使用JdbcTemplate,必须要实现DataSource接口,通过传入DataSource创建JdbcTemplate对象。JdbcTemplate的方法已经固定,不管什么数据库都要遵循这种执行流程。
总结模板模式重点是有固定的处理流程无法修改,但是可以改变某一些流程的处理方式;相对于策略模式来说,策略模式是处理方式(或者说算法)已经固定好,但是可以选择其中一个来处理,侧重于选择。PS:欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,欢迎转发分享给更多人。版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!欢迎加入后端架构师交流群,在后台回复“学习”即可。在这里,我为大家准备了一份2021年最新最全BAT等大厂Java面试经验总结
别找了,想获取史上最简单的Java大厂面试题学习资料
扫下方二维码回复「手册」就好了猜你还想看
阿里、腾讯、百度、华为、京东最新面试题汇集
HashMap 面试二十一问!看它就够了!新版Win10来了!网友:丑哭了面试这样回答Java调优,至少加1000块!!!嘿,你在看吗?

一把 LOL 案例,学会模板设计模式!相关推荐

  1. 某腾LOL开发负责人教你如何用Java实现一把 LOL 案例,学会模板设计模式!

    前言 假如开一把lol,必须要做哪些事呢?可以简化位这三个步骤.选择英雄,开始游戏,投降.这三个步骤必须按照顺序执行.映射到代码中可以想到socket信息传输,建立连接,传输数据,关闭连接. [这就是 ...

  2. C#模板设计模式使用和学习心得

    模板设计模式: 模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种: 抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现. 模版方法:由抽象类 ...

  3. Java笔记018-抽象类、抽象类最佳实践-模板设计模式、接口、内部类

    目录 抽象类 先看一个问题 小结: 抽象类快速入门 抽象类的介绍 抽象类使用的注意事项和细节讨论 抽象类练习题 抽象类最佳实践-模板设计模式 基本介绍 模板设计模式能解决的问题 最佳实践 最佳实践 接 ...

  4. Java设计模式——模板设计模式

    模板设计模式 1.模板模式简介 模板模式(Template ):模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑 ...

  5. 00012.02设计模式(模板设计模式的了解)

    一.入门:什么叫设计模式 1.什么叫设计模式? 前辈们在写了很多代码以后得出来的一种代码的结构,总结出了一些模式,而且确保这样的写法比另外一种写法更优 简单来说就是:解决问题的套路.代码结构 在Jav ...

  6. 【复习回顾、继承、抽象类模板设计模式】

    day01[复习回顾.继承.抽象类模板设计模式] 今日内容 面向对象复习------>必须掌握 继承 继承的格式------>必须掌握 继承后成员访问特点------>必须掌握 th ...

  7. 【26天高效学完Java编程】Day11:继承、抽象类、模板设计模式详解

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学习Java编程 相关软件地址:软件地址 所有代码地址:代码地址 如果 ...

  8. 01-复习回顾、继承、抽象类、模板设计模式

    day01[复习回顾.继承.抽象类模板设计模式] 今日内容 面向对象复习 类的创建------>必须掌握 对象的创建和使用------>必须掌握 匿名对象 继承 如何继承-继承的格式--- ...

  9. 面向对象之继承,抽象类、模板设计模式

    第1章 复习回顾 1.1 类和对象 定义一个类 格式: 修饰符 class 类名{//类中的五大成分.1.成员变量2.构造方法3.成员方法4.内部类5.代码块 } 代码: public class S ...

最新文章

  1. java 自己抛空指针异常_java Timetask 访问service 抛空指针异常解决方案
  2. Hive常用函数大全一览
  3. JAVA-数据库之JDBC连接MySQL数据库
  4. Angular中实现路由跳转并通过get方式传递参数
  5. (计算机组成原理)第二章数据的表示和运算-第二节5:定点数乘法运算(原码/补码一位乘法)
  6. 攻城掠地sdk服务器没有响应,攻城掠地没落的原因及对策
  7. jQuery做个TextBox自动完成条
  8. [转载] Dreamweaver——02 创建网页的基本对象
  9. 遥感数据免费获取网址
  10. 扫一扫就可一键叫车 杭州暖心车站让老人去往生活里的远处
  11. 局域网 FTP建立,搭建一个简易的局域网服务器
  12. AWS abbreviation
  13. 原理 | 分布式链路跟踪组件 SOFATracer 和 Zipkin 模型转换
  14. 创意h5游戏案例:记忆类H5手机游戏评测
  15. linux使用tmux后台运行程序
  16. linux音频子系统 - DAPM
  17. addEventListener() 事件监听
  18. 当初的愿望实现了吗?看华为云普惠AI这一年
  19. easyui 合并列_Easyui DataGrid 合并单元格
  20. android 锁屏显示音乐播放器,Android锁屏界面控制音乐播放

热门文章

  1. QLabel实现自适应图片大小(可鼠标右击全屏)
  2. JobScheduler用法
  3. linux locale设置
  4. oracle查询sql语句
  5. 音符起始点检测(音频节奏检测)(1)
  6. MySQL的性能优化理论
  7. Ubuntu 21.04 如何进入命令行的登录界面
  8. 程序员必备的思维能力:结构化思维
  9. SSH2远程连接例子
  10. MySQL自增列之起始与步长