在我的博客《Hibernate總結(一)》在對資料庫的增刪改查前後重覆的使用了得到Session與關閉Session等操作,因此我想到了模板設計模式。 模板設計模式概述: 定義一個操作中的演算法的骨架,而將步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義演算法的某些特定步驟。 廢話不 ...
在我的博客《Hibernate總結(一)》在對資料庫的增刪改查前後重覆的使用了得到Session與關閉Session等操作,因此我想到了模板設計模式。
模板設計模式概述:
定義一個操作中的演算法的骨架,而將步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義演算法的某些特定步驟。
廢話不多說,先貼上之前的代碼:
public class a { public static void main(String[] args){ Configuration config=new Configuration().configure(); SessionFactory sf=config.buildSessionFactory(); Session s=sf.openSession(); sf.getCurrentSession(); User u=new User(); u.setAge(21); u.setName("King"); s.save(u); s.close(); sf.close(); } }
在這裡大量重覆了得到Session與關閉Session的操作,因此使用模板設計模式:
廢話不多說,上代碼
public abstract class Template {//抽象父類,定義了演算法骨架 public abstract void fun1(Session s);//子類中要實現的功能 public void execute(){ Configuration config=new Configuration().configure(); SessionFactory sf=config.buildSessionFactory(); Session s=sf.openSession(); Transaction tran=null; try { tran=s.beginTransaction(); fun1(s); tran.commit(); } catch(Exception e) { if(tran!=null){ tran.rollback(); } e.printStackTrace(); } finally{ s.close(); sf.close(); } } }
而我們這麼使用:
public class a { public static void main(String[] args){ new Template(){//在此使用Java匿名內部類 @Override public void fun1(Session s) { User u=new User(); u.setAge(21); u.setName("King"); s.save(u); } }.execute(); } }
這樣就極大簡化了代碼。
當然,到了這裡,你是否想起了代理模式呢,靜態代理與動態代理模式,下一篇將和大家分享代理設計模式...