漫说模板方法模式---学生时代的烦恼
来源:互联网 发布:php代理跨域 编辑:程序博客网 时间:2024/06/11 12:03
1. 你过了吗?多么令人抓狂的四六级考试呀
有多少人曾经殚精竭虑?有多少人溯夜难眠?就是为了仅仅通过而已。
2. 考试之前,匆忙的需找这2B铅笔,考试之中的答题卡,多么熟悉的过程呀,
多么多的选择题,由我们来涂写,一次次的皱眉,只为胜利的那一刻。
你看,只有一套题目(其实分AB卷),一套答题纸(也分为AB),多么简单的流程呀,可是为什么我们的分数差别那么大呢??
4. 下面切入正题,我们的模板方法模式:
- Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
- 定义在一个操作中的一个算法框架,把一些步骤推迟到子类去实现。模板方法模式让子类不需要改变算法结构而重新定义特定的算法步骤。
4. 示例代码
类图
package com.programcreek.designpatterns.templatemethod; abstract public class Vehicle { //set to protected so that subclass can access protected boolean status; abstract void start(); abstract void run(); abstract void stop(); public void testYourVehicle(){ start(); if(this.status){ run(); stop(); } }}package com.programcreek.designpatterns.templatemethod; public class Car extends Vehicle { @Override void start() { this.status = true; } @Override void run() { System.out.println("Run fast!"); } @Override void stop() { System.out.println("Car stop!"); }}package com.programcreek.designpatterns.templatemethod; public class Truck extends Vehicle { @Override void start() { this.status = true; } @Override void run() { System.out.println("Run slowly!"); } @Override void stop() { System.out.println("Truck stop!"); }}import com.programcreek.designpatterns.templatemethod.Car;import com.programcreek.designpatterns.templatemethod.Truck;import com.programcreek.designpatterns.templatemethod.Vehicle; public class Main { public static void main(String args[]){ Car car = new Car(); testVehicle(car); Truck truck = new Truck(); testVehicle(truck); } public static void testVehicle(Vehicle v){ v.testYourVehicle(); }}
5. 应用场景
1. 多个子类有公共方法,并且逻辑基本相同
2. 对复杂的算法,核心算法设计为模板方法,细节功能则由各个子类实现
3. 重构代码
6.扩展
1.在spring中的应用spring jdbc
Spring主要提供JDBC模板方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程
Spring提供了3个模板类:
- JdbcTemplate:Spring里最基本的JDBC模板,利用JDBC和简单的索引参数查询提供对数据库的简单访问。
- NamedParameterJdbcTemplate:能够在执行查询时把值绑定到SQL里的命名参数,而不是使用索引参数。
- SimpleJdbcTemplate:利用Java 5的特性,比如自动装箱、通用(generic)和可变参数列表来简化JDBC模板的使用
2. 在jdk中的应用
- 非抽象方法
java.io.InputStream
,java.io.OutputStream
,java.io.Reader
和java.io.Writer
. - 非抽象方法
java.util.AbstractList
,java.util.AbstractSet
andjava.util.AbstractMap
. javax.servlet.http.HttpServlet
, 所有doXXX()
默认发送一个 HTTP 405 "不允许的方法" 错误作为响应.你可以改写或者默认.
reference:
http://www.programcreek.com/2012/08/java-design-pattern-template-method/
http://en.wikipedia.org/wiki/Template_method_pattern
http://book.51cto.com/art/201202/318456.htm
http://my.oschina.net/u/1470003/blog/224031
http://my.oschina.net/aps/blog/85981
http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns
注:以上图片来自于互联网,不一一注明了。
- 漫说模板方法模式---学生时代的烦恼
- 学生时代的笑话
- 学生时代的书单
- 学生时代的课外阅读
- 大专即将毕业的学生的烦恼
- 学生时代最喜欢的球星
- 学生时代的一点记忆
- 学生时代的一些代码
- 回忆自己的学生时代
- 漫说单例模式--宝宝成长记 你真的了解了吗?
- 漫说代理模式---给宝宝成长护航
- "学生时代"
- 学生时代
- 学生时代
- 模板方法模式的例子
- 模板方法模式的结构
- 【有毒的设计模式】模板方法模式
- Android的设计模式-模板方法模式
- Android Latout属性
- 3D虚拟展示是商家展示商品时的不二之选.
- Android 开发仿微信位置共享
- 大数据技术资源分享
- 技术不错的地址
- 漫说模板方法模式---学生时代的烦恼
- Android webapp Ajax exception `INVALID_STATE_ERR: DOM Exception 11`
- Mysql学习笔记七,存储过程和函数
- jQuery ZeroClipboard粘贴板
- hibernate tools自动生成entity代码
- 漫谈设计模式--3分钟理解桥接模式:笔和画的关系
- 使用Animation-list实现等待旋转圆圈动画
- Scala学习第十七天 包、类、对象、成员、伴生类、伴生对象访问权限实战彻底详解
- hadoop2.6 & apache-hive-1.2.1-bin & pig-0.15.0 因jline不兼容