使用模板方法模式+私有内部类+匿名类解决各个方法间代码结构类似的问题。
Posted deodara
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用模板方法模式+私有内部类+匿名类解决各个方法间代码结构类似的问题。相关的知识,希望对你有一定的参考价值。
package org.hibernate.dao; import java.io.Serializable; import org.hibernate.*; import org.hibernate.entity.*; //使用模板方法模式+私有内部类+匿名类解决各个方法间代码结构类似的问题。 public class UserDAOImpl implements UserDAO { private abstract class UserDAOTemplate{ abstract protected Object operateSession(Session session,Object arg); final public Object operateSessionInTransaction(Object arg){ Object result=null; Session session= HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); try{ result=operateSession(session,arg); tx.commit(); } catch(Exception e){ e.printStackTrace(); tx.rollback(); result=null; }finally{ HibernateUtil. closeSession(); } return result; } } public void save(User user){ new UserDAOTemplate(){ protected Object operateSession(Session session,Object arg){ session.save(arg); return null; } }.operateSessionInTransaction(user); } public User findById(int id){ User user=null; user=(User)new UserDAOTemplate(){ protected Object operateSession(Session session,Object arg){ return session.get(User.class,(Serializable)arg); } }.operateSessionInTransaction(id); return user; } public void delete(User user){ new UserDAOTemplate(){ protected Object operateSession(Session session,Object arg){ session.delete(arg); return null; } }.operateSessionInTransaction(user); } //对比参考用 public void update(User user){ Session session= HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); try{ session.update(user); tx.commit(); } catch(Exception e){ e.printStackTrace(); tx.rollback(); }finally{ HibernateUtil. closeSession(); } } }
以上是关于使用模板方法模式+私有内部类+匿名类解决各个方法间代码结构类似的问题。的主要内容,如果未能解决你的问题,请参考以下文章