在这里我首先以一个比较简单的小例子让不知道模板模式的人先有个入门的概念。(如果要想深入了解,去看<java与模式>) 在后面的例子我将以一个比较实用的例子来说明这种模式给我们带来的好处,并且这个例子很实用。下面我会把所有的代码都贴出来,你可以直接Copy代码就可以运行,如果你已经有啦一定了解,那么就直接看第二个吧。
在这里我希望你把它看完,并把它理解。因为开始我在看Spring的源码的时候也是看啦好多次才把思路理清楚的。
首先先说说这两个例子的作用,要不然看啦大半天都不知道是什么东西。
实例1:
当我们去买东西的时候,东西都会打折,然而每种东西的折扣都不一样。如买Book的时候,书的折扣是 0.8 折而当我们去买Video 的时候,它是 0.7 折,如果这些分类的商品很多的时候。而我们每次都要 在每一个类中写一个打折后得到的实际价格的话,那是不是感觉到很累赘。也很不爽。所以我们有必要把它抽象出来。那么每个类只要从这个类继承就可以啦。如果重用的方法多的话,那么这就会带来很大的好处。
看源代码:
下面这是测试方法:
结果:
BookRealPrice: 61.6
VideoRealPrice: 240.0
实例2:
如果不是用Orm工具而是用经常用jdbc操作数据库的人会感到每次要连接到数据库,CRUD 数据的时候写一大串的
try{}catch{},几乎每次都写,真是他妈的烦死啦。大家肯定有同感吧,反正我开始还不会用ORM工具的时候就觉得很麻烦的而当你看啦下面这个例子后就就会觉得方便多啦.也不用写那么多的try catch{}啦,值得高兴的是Spring中对这做啦很好的封装,所以我就横批写啦一个,这样就不与Spring偶合在一起啦,可以单独的拿出来使用。
这时是数据库的表:
DROP DATABASE IF EXISTS `hibernate`;
CREATE DATABASE `hibernate` ;
USE `hibernate`;
CREATE TABLE `person` (
`id` int(32) NOT NULL DEFAULT '0',
`name` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
1.首先我们先做一个接口,现在先不管它,等下你就知道他有什么用啦!
2.而这里是最关键的,就是建一个Jdbc的模板方法,把那些经常要做的try{} catch{}都写在一个类里免得以后每次都还去写。这就成啦代码复用。
下面是我们的测试方法:
测试结果:
Count: 1
dongguoh
123456
如果你要用 PreparedStatement 的话,想传参数的话,再写一个接口来实现,再在JdbcTemplate重载一个方法如:public Object execute(IPreparedStatementCallback action,,Object[] objArray)再多传一个你要传递的参数数组。