`
hello_world_hello
  • 浏览: 8902 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 设计模式---模板方法模式

阅读更多

 模板方法设计模式是常用的设计模式之一,通过继承实现代码复用。
设计思想:

  1. 定义一个抽象类概括完成一件事情的步骤或者抽象出相同的代码实现复用,具体的实现逻辑由子类实现。
  2. 定义抽象类的实现类,重写父类中的抽象方法以实现具体的逻辑处理。

    例如常见的jdbc查询操作,1)加载数据库驱动 2)获取连接 3) 获取执行sql的statement 4)执行sql 语句 5) 结果集处理 6)释放资源  这些操作是查询的必须步骤,无论查询何种数据步骤1,2,3,4,6都是不变的,只有 步骤5是需要变的。所以我们可以定义一个抽象类包含一个模板方法和一个抽象方法,其中该抽象方法需要子类去实现。

    代码如下:
    定义一个工具类,获取连接,释放资源
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JDBCUtils {
    	//定义数据库基本信息
    	private enum DriverInfo {
    		DRIVERURL("jdbc:mysql://localhost:3306/jdbc"),DRIVERUSERNAME("root"),DRIVERPASSWORD("");
    		
    		private String info;
    		private String getInfo() {
    			return info;
    		}
    		private DriverInfo(String info) {
    			this.info = info;
    		}
    	}
    	
    	//加载数据库驱动
    	static {
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    			throw new ExceptionInInitializerError();
    		}
    	}
    	
    	//获取数据库连接
    	public static Connection getConnection() throws SQLException {
    		return DriverManager.getConnection(DriverInfo.DRIVERURL.getInfo(), DriverInfo.DRIVERUSERNAME.getInfo(), DriverInfo.DRIVERPASSWORD.getInfo());
    	}
    	
    	//释放资源
    	public static void close(Connection conn) {
    		close(conn, null, null);
    	}
    	//释放资源
    	public static void close(Connection conn, Statement statement) {
    		close(conn, statement, null);
    	}
    	//释放资源
    	public static void close(Connection conn, Statement statement, ResultSet rs) {
    		if(rs != null) {
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		if(statement != null) {
    			try {
    				statement.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		if(conn != null) {
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
     说明:定义数据库信息之所以用枚举纯属熟悉一下(公司用的比较多)。

    创建tb_user表:
    create table tb_user (id int(11) primary key auto_increment, name varchar(20) , birthday date);
    定义一个User实体:
    import java.util.Date;
    
    public class User {
    	private int id;
    	private String name;
    	private Date birthday;
    	
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Date getBirthday() {
    		return birthday;
    	}
    	public void setBirthday(Date birthday) {
    		this.birthday = birthday;
    	}
    }
     
    抽象类:
    public abstract class AbstractDao {
    	/**
    	 * @param sql
    	 * @param params
    	 * @return
    	 */
    	protected Object queryForObject(String sql, Object[] params) {
    		Connection conn = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    		Object obj = null;
    		try {
    			//1,2加载驱动以及获取数据库连接
    			conn = JDBCUtils.getConnection();
    			//3获取执行sql的statement
    			ps = conn.prepareStatement(sql);
    			for (int i = 0; i < params.length; i++) {
    				ps.setObject(i + 1, params[i]);	
    			}
    			//4执行sql
    			rs = ps.executeQuery();
    
    			//5需要子类处理结果集
    			if(rs.next()) {//只取第一个结果
    				obj = rowMapper(rs);
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(e.getMessage());
    		} finally {
    			//6使用资源
    			JDBCUtils.close(conn, ps, rs);
    		}
    		return obj;
    	}
    	
    	/**
    	 * 需要子类实现的抽象方法,不同的查询返回的结果集是不同的
    	 * @throws SQLException 
    	 */
    	protected abstract Object rowMapper(ResultSet rs) throws SQLException;
    }

    抽象类的实现:
    public class UserDaoImpl extends AbstractDao {
    
    	public User findById(int id) {
    		String sql = "select id,name,birthday from tb_user where id=?";
    		Object[] params = new Object[] {id};
    		return (User) super.queryForObject(sql, params);
    	}
    	@Override
    	protected Object rowMapper(ResultSet rs) throws SQLException {
    		User user = new User();
    		user.setId(rs.getInt("id"));
    		user.setName(rs.getString("name"));
    		user.setBirthday(rs.getDate("birthday"));
    		return user;
    	}
           //测试
    	public static void main(String[] args) {
    		System.out.println(new UserDaoImpl().findById(1).getName());
    	}
    }
     

 

分享到:
评论

相关推荐

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    JAVA-设计模式-行为型模式-模板方法模式

    JAVA-设计模式-行为型模式-模板方法模式

    java设计模式-模板模式

    模板模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。此模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤...

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    JAVA设计模式-chm版

    Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...

    Java设计模式----通俗易懂版

    Java设计模式是软件工程中的一种重要思想,它总结了在解决特定问题时,程序员们反复使用的一些最佳实践和解决方案。这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者...

    java设计模式-图解-附代码

    ### Java设计模式详解 #### 创建型模式 **1.1 工厂方法(Factory Method)** 工厂方法模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这使得一个类的实例化可以被推迟到其子类。这种模式在以下...

    java设计模式的应用

    ### Java设计模式的应用 #### 一、引言 在当今快速发展的软件开发领域,Java作为一门功能强大且灵活的语言,不仅拥有丰富的API资源,还能与强大的数据库系统无缝对接。这使得许多开发人员能够以模块化的形式构建...

    JAVA设计模式---100%推荐

    这篇名为"JAVA设计模式---100%推荐"的资源,可能是对Java设计模式的深入解析,旨在帮助开发者更好地理解和应用这些模式。 设计模式通常分为三类:创建型、结构型和行为型。创建型模式涉及对象的实例化过程,如单例...

    JAVA设计模式-设计模式公司出品

    JAVA设计模式是编程领域中非常重要的概念,它为软件开发人员提供了在特定情境下解决常见问题的模板。设计模式公司出品的《JAVA设计模式》书籍,详细介绍了多种设计模式,适合不同水平的程序员学习和使用。 首先,...

    java模式--模板模式实例代码

    在Java中,模板模式通常使用抽象类来定义模板方法,这个方法由一系列基本操作组成,这些操作在模板类中可能是抽象的或已经实现了的。子类通过重写这些抽象方法,为算法的具体步骤提供实现。这种设计模式遵循“开闭...

    JAVA设计模式-原则和23种设计模式归纳总结

    本资源主要介绍了JAVA设计模式的原则和23种设计模式的总结。设计模式是软件设计中的一种解决方案,能够使软件系统更加灵活、可维护和可扩展。本资源首先介绍了设计模式的六大原则,包括单一责任原则、开闭原则、里氏...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    java与模式-阎宏

    《Java与模式》是阎宏博士的一本经典著作,它深入浅出地介绍了如何在Java编程中应用设计模式。这本书不仅讲解了设计模式的基本概念,还涵盖了23种经典的GOF设计模式,并结合Java语言特性进行了详细的解释和实例演示...

    Java设计模式-图解-附代码.doc

    在软件工程中,设计模式是一种被广泛接受的解决特定设计问题的...因此,深入学习和理解Java设计模式对于任何Java开发者来说都是至关重要的。通过文档中的图解和代码示例,读者可以更好地理解和掌握这些模式的实际应用。

    Java设计模式-

    Java设计模式是软件工程中的一种重要思想,它代表了在解决特定问题时的最佳实践。这些模式都是经过时间和经验验证的设计解决方案,可以提高代码的可读性、可维护性和复用性。Java设计模式主要分为三类:创建型模式、...

    设计模式-模板方法模式ppt

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    JAVA设计模式--入门

    **Java设计模式——入门** 设计模式是软件开发中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。Java设计模式是面向对象编程中的一个重要概念,可以帮助开发者编写可复用、可维护、易于理解的代码。这...

    Java设计模式-图解-附代码

    Java设计模式是软件开发中的一种最佳实践,它们是解决常见问题的经验总结,旨在提高代码的可重用性、可维护性和可扩展性。本篇Java设计模式(疯狂Java联盟版)详细介绍了二十三种设计模式,包括创建型、结构型和行为...

Global site tag (gtag.js) - Google Analytics