`
BUYAOZAIBEIDAOLE
  • 浏览: 29865 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

漫谈设计模式(二)模板方法(Template Method)模式

阅读更多
本次将介绍第一个模式,也是最容易理解和试用的模式之一,模板方法模式,从一个简单场景触发介绍改模式。


讲述DRY原则


模板方法模式


引入回调的模板方法模式

父类代码
package com.model.templateMethod;

/**
 * 模板方法
 * 
 * Don't Repeat Yourself
 * 
 * @author leo Chen
 *
 */
public abstract class HappyPeople {

	public void celebrateSpringFestival() {
		// Bying ticket 购买车票
		subcribeTicket();
		// Travelling by train... 乘坐火车
		travel();
		// Celebrating Chinese New Year.. 过春节
		celebrate();
	}

	/**
	 * 庆祝
	 */
	private void celebrate() {
		System.out.println("Celebrating Chinese New Year");
	}

	/**
	 * 乘坐交通工具
	 */
	protected abstract void travel();

	/**
	 * 购买车票
	 */
	protected final void subcribeTicket() {
		System.out.println("Buying ticket..");
	}

}


继承的子类PassengerByAir
package com.model.templateMethod;

public class PassengerByAir extends HappyPeople {

	@Override
	protected void travel() {
		// TODO Auto-generated method stub
		// Traveling by Air 坐飞机
		System.out.println("Traveling by Air...");

	}

}



继承的子类PassengerByCoach

package com.model.templateMethod;

public class PassengerByCoach extends HappyPeople {

	@Override
	protected void travel() {
		// TODO Auto-generated method stub
		// Traveling by Coach 坐大巴
		System.out.println("Traveling by Coach...");

	}

}


测试类

package com.model.templateMethod;

public class Test {

	public static void main(String[] args) {
		HappyPeople passengerByAir = new PassengerByAir();
		HappyPeople passengerByCoach = new PassengerByCoach();
		System.out.println("Let's Go Home For A Grand Family Reunion....\n");
		System.out.println("Tom is going home:");
		passengerByAir.celebrateSpringFestival();
		System.out.println("\nCatherine is going home");
		passengerByCoach.celebrateSpringFestival();
	}

}


  • 定义在一个操作中的一个算法框架,把一些步骤推迟到子类去实现。模板方法模式让子类不需要概算算法结构而重新定义特定的算法步骤。



回调模式的模板方法,避免子类泛滥
ResultSetHandler

package com.model.templateMethod.callback;

import java.sql.ResultSet;

/**
 * 泛型回调类
 * 
 * @author leo Chen
 *
 * @param <T>
 */
public interface ResultSetHandler<T> {

	public T handle(ResultSet rs);

}



SimpleJdbcQueryTemplate

package com.model.templateMethod.callback;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SimpleJdbcQueryTemplate {

	public <T> T query(String queryString, ResultSetHandler<T> reHandler) {
		Connection connection = null;
		PreparedStatement prepareStatement = null;
		try {
			connection = getCollection();
			prepareStatement = connection.prepareStatement(queryString);
			ResultSet resultSet = prepareStatement.executeQuery();
			return reHandler.handle(resultSet);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				connection.close();
				prepareStatement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}

	private Connection getCollection() {
		Connection connection = null;
		try {
			connection = DriverManager.getConnection("");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return connection;
	}
}



测试类
package com.model.templateMethod.callback;

import java.sql.ResultSet;

public class Test {

	public void testTemplate() {
		new SimpleJdbcQueryTemplate().query("select * from db",
				new ResultSetHandler<Boolean>() {
					public Boolean handle(ResultSet rs) {
						return Boolean.TRUE;
					}
				});
	}
}


分享到:
评论

相关推荐

    漫谈设计模式代码

    9. **模板方法模式**:在抽象类中定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 10. **职责链模式**:将请求的发送者和接收者解耦,让...

    漫谈设计模式-从面向对象开始

    3. 行为型模式:涉及对象之间的职责分配,包括命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等。 每种模式都有其使用场景和优缺点,...

    漫谈设计模式.rar

    3. 行为型设计模式:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、责任链模式(Chain of Responsibility)、命令模式(Command)、迭代器模式(Iterator)、备忘录模式...

    漫谈设计模式:从面向对象开始(带书签)

    《漫谈设计模式:从面向对象开始(带书签)》设计模式相关书籍。

    漫谈设计模式

    漫谈设计模式 网络数据 分为模式介绍,创建模式和行为模式几个章节

    《漫谈设计模式》—Java设计模式的好帮手

    例如,Java的接口可以用来实现策略模式,而抽象类在构建模板方法模式时发挥着重要作用。作者可能会强调面向接口编程的思想,这是很多设计模式的基础。 在实际的软件开发过程中,合理运用设计模式能够提高代码的...

    漫谈设计模式:从面向对象开始(带书签扫描版).刘济华.pdf

    若想一本书涵盖所有模式,那么这本书将会非常庞大,以前的设计模式书籍专注于介绍设计模式,虽然读者了解了这些设计模式,但是仍然不知道如何合理地使用它们,往往导致读者为了使用设计模式而设计,而不是从问题出发...

    漫谈设计模式:从面向对象开始.azw3

    《漫谈设计模式:从面向对象开始》主要从最基本的设计模式入手,并结合一些J2EE开发过程经常遇见的技术和概念,你将全面理解这10多个设计模式,并在开发过程中,让你真正体会和思考面向对象编程的思想,也只有掌握...

    漫谈设计模式:从面向对象开始

    若想一本书涵盖所有模式,那么《漫谈设计模式:从面向对象开始》将会非常庞大,以前的设计模式书籍专注于介绍设计模式,虽然读者了解了这些设计模式,但是仍然不知道如何合理地使用它们,往往导致读者为了使用设计...

    漫谈设计模式-从面向对象开始.刘济华.扫描版

    漫谈设计模式-从面向对象开始.刘济华.扫描版.带详细目录。

    java多线程设计模式详解(PDF及源码)

    本书浅显易懂的介绍了JAVA线程相关的设计模式,通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA...

    设计模式与代码重构合集

    漫谈设计模式.pdf 编程珠玑(第二版).pdf 设计模式与java实践.pdf 设计模式精解.pdf 设计模式精解-GoF 23种设计模式解析附C++实现源码 .pdf 软件架构设计的思想与模式.pdf 重构与模式(Java).pdf

Global site tag (gtag.js) - Google Analytics