手记

模板方法模式在项目中的应用


 1、首先看模板方法的定义:定义一个操作中的算法的骨架,而将一些步骤迟到到子类中。模板方法使得子类可以
 不改变一个算法的结构即可重定义该算法的某些特定步骤.

 

2、模板方法模式结构图:

 

     

3、在代码中的表现:

     3.1定义一个抽象模板类

Java代码  

  1. /**抽象模板类**/  

  2. public abstract class AbstractClass {  

  3.     /** 

  4.      * 定义一系列步骤的方法 

  5.      */  

  6.     public void templateMethod(){  

  7.         commonOperation();  

  8.         operation1();  

  9.         operation2();  

  10.     }  

  11.     private void commonOperation(){  

  12.         System.out.println("共同的方法");  

  13.     }  

  14.     /**要求子类去实现的方法1**/  

  15.     protected abstract void operation1();  

  16.     /**要求子类去实现的方法2**/  

  17.     protected abstract void operation2();  

  18. }  

 

   3.2定义第一个具体ConcreteClassA子类

Java代码  

  1. public class ConcreteClassA extends AbstractClass {  

  2.     @Override  

  3.     protected void operation1() {  

  4.         System.out.println("子类A实现的operation1方法");  

  5.     }  

  6.     @Override  

  7.     protected void operation2() {  

  8.         System.out.println("子类A实现的operation2方法");  

  9.     }  

  10. }  

   3.3定义第二个具体ConcreteClassB子类

Java代码  

  1. public class ConcreteClassB extends AbstractClass {  

  2.     @Override  

  3.     protected void operation1() {  

  4.         System.out.println("子类B实现的operation1方法");  

  5.     }  

  6.     @Override  

  7.     protected void operation2() {  

  8.         System.out.println("子类B实现的operation2方法");  

  9.     }  

  10. }  

 

   3.4测试类TemplateTest

  

Java代码  

  1. /** 

  2.  * 测试类 

  3.  * @author pylxy 

  4.  * 

  5.  */  

  6. public class TemplateTest {  

  7.     public static void main(String[] args) {  

  8.         AbstractClass ac = new ConcreteClassA();  

  9.         ac.templateMethod();  

  10.         ac = new ConcreteClassB();  

  11.         ac.templateMethod();  

  12.     }  

  13.   

  14. }  

    运行结果:

  

Java代码  

  1. 共同的方法  

  2. 子类A实现的operation1方法  

  3. 子类A实现的operation2方法  

  4. 共同的方法  

  5. 子类B实现的operation1方法  

  6. 子类B实现的operation2方法  

4、 使用模板方法模式处理DAO中的查询方法

    4.1  定义一个AbstractDao类

   

Java代码  

  1. /**模板类**/  

  2. public abstract class AbstractDao {  

  3.     /**查询的模板方法**/  

  4.     public Object find(String sql, Object[] args) {  

  5.         Connection conn = null;  

  6.         PreparedStatement ps = null;  

  7.         ResultSet rs = null;  

  8.         try {  

  9.             conn = getConnection();  

  10.             ps = conn.prepareStatement(sql);  

  11.             for (int i = 0; i < args.length; i++)  

  12.                 ps.setObject(i + 1, args[i]);  

  13.             rs = ps.executeQuery();  

  14.             Object obj = null;  

  15.             if (rs.next()) {  

  16.                 obj = rowMapper(rs);  

  17.             }  

  18.             return obj;  

  19.         } catch (SQLException e) {  

  20.               

  21.         } finally {  

  22.             close(rs, ps, conn);  

  23.         }  

  24.     }  

  25.     //抽象方法让子类去实现  

  26.     abstract protected Object rowMapper(ResultSet rs) throws SQLException;  

  27. }  

 

   4.2 定义UserDaoImpl类,同时继承AbstratDao类

 

Java代码  

  1. public class UserDaoImpl extends AbstractDao {  

  2.   

  3.     public User findUser(String username) {  

  4.         String sql = "select * from user where name=?";  

  5.         Object[] args = new Object[] { username };  

  6.         Object user = super.find(sql, args);//调用父类模板方法  

  7.         return (User) user;  

  8.     }  

  9.     //实现让父类去调用的抽象方法  

  10.     protected Object rowMapper(ResultSet rs) throws SQLException {  

  11.         User user = new User();  

  12.         user.setId(rs.getInt("id"));  

  13.         user.setUsername(rs.getString("username"));  

  14.         user.setPassword(rs.getFloat("password"));  

  15.         user.setBirthday(rs.getDate("birthday"));  

  16.         return user;  

  17.     }  

  18. }  

  5、类及方法的对应关系

   AbstractDao类------------>AbstractClass 类

   UserDaoImpl 子类----------->ConcreteClassA子类

   abstract protected Object rowMapper方法----> abstract void operation1方法

   

  这样就实现了不同的Dao类共用一部分代码,有效地实现了代码的复用.


0人推荐
随时随地看视频
慕课网APP