java設計模式:DAO模式
導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。下面我們來看看DAO模式,希望對大家有所幫助。
DAO設計模式
★ DAO的理解
1、DAO其實是利用組合工廠模式來解決問題的,并沒有帶來新的功能,所以學的其實就是個思路。
2、DAO理論上是沒有層數限制的。
3、DAO的各層理論上是沒有先后的。
★ DAO模式的本質
一層屏蔽一種變化
123456<strong>★DAO基礎 DAO模式是標準的J2EE設計模式之一.開發人員使用這個模式把底層的數據訪問操作和上層的商務邏輯分開.一個典型的DAO實現有下列幾個組件: 1. 一個DAO工廠類; 2. 一個DAO接口; 3. 一個實現DAO接口的具體類; 4. 數據傳遞對象(有些時候叫做值對象).</strong>下面舉例(多層dao接口的實現)
具體實現:
1.dao接口:
12345package cn.hncu.pattern.dao.dao; public interface DepDAO { public void create(String userId, String name); }2.dao工廠
12345678910111213141516171819package cn.hncu.pattern.dao.factory; import cn.hncu.pattern.dao.dao.DepDAO; import cn.hncu.pattern.dao.impl.a.factory.F2AFactory; import cn.hncu.pattern.dao.impl.b.factory.F2BFactory; public class F1Factory { private F1Factory(){ } public static DepDAO getDepDAO(){ int type1=1;//第一層工廠的選擇類型,按理應該從用戶的`配置信息中讀取,我們這里模擬了 if(type1==1){ return F2AFactory.getDepDAO(); }else if(type1==2){ return F2BFactory.getDepDAO(); } return null; } }3.dao實現接口
第二層dao
12345678910111213141516171819202122232425package cn.hncu.pattern.dao.impl.a.factory; import cn.hncu.pattern.dao.dao.DepDAO; import cn.hncu.pattern.dao.impl.a.rdb.factory.F3A_RDB_Factory; import cn.hncu.pattern.dao.impl.b.factory.F2BFactory; public class F2AFactory { private F2AFactory() { } public static DepDAO getDepDAO() { int type2 = 3;// 第二層工廠的選擇類型,按理應該從用戶的配置信息中讀取,我們這里模擬了 if (type2 == 1) { //return F3A_File_Factory.getDepDAO(); } else if (type2 == 2) { //return F3A_ODB_Factory.getDepDAO(); } else if (type2 == 3) { return F3A_RDB_Factory.getDepDAO(); }else if (type2 == 4) { //return F3A_XML_Factory.getDepDAO(); } return null; } } 1234567891011package cn.hncu.pattern.dao.impl.b.factory; import cn.hncu.pattern.dao.dao.DepDAO; public class F2BFactory { private F2BFactory(){ } public static DepDAO getDepDAO(){ return null; } }第三層dao
123456789101112131415161718192021package cn.hncu.pattern.dao.impl.a.rdb.factory; import cn.hncu.pattern.dao.dao.DepDAO; import cn.hncu.pattern.dao.impl.a.rdb.oracle.factory.F4A_RDB_Oracle_Factory; public class F3A_RDB_Factory { private F3A_RDB_Factory(){ } public static DepDAO getDepDAO(){ int type3 = 2;// 第3層工廠的選擇類型,按理應該從用戶的配置信息中讀取,我們這里模擬了 if(type3==1){ //return F4A_RDB_MySQL_Factory.getDepDAO(); }else if(type3==2){ return F4A_RDB_Oracle_Factory.getDepDAO(); }else if(type3==3){ //return F4A_RDB_XML_Factory.getDepDAO(); } return null; } }第四層dao
123456789101112131415161718192021222324252627package cn.hncu.pattern.dao.impl.a.rdb.oracle.factory; import cn.hncu.pattern.dao.dao.DepDAO; import cn.hncu.pattern.dao.impl.a.rdb.oracle.ejb.DepEjbImpl; import cn.hncu.pattern.dao.impl.a.rdb.oracle.hibernate.DepHibernateImpl; import cn.hncu.pattern.dao.impl.a.rdb.oracle.jdbc.DepJdbcImpl; import cn.hncu.pattern.dao.impl.a.rdb.oracle.jpa.DepJpaImpl; public class F4A_RDB_Oracle_Factory { private F4A_RDB_Oracle_Factory(){ } public static DepDAO getDepDAO(){ int type4 = 1;// 第4層工廠的選擇類型,按理應該從用戶的配置信息中讀取,我們這里模擬了 if(type4==1){ return new DepEjbImpl(); }else if(type4==2){ return new DepHibernateImpl(); }else if(type4==3){ return new DepJdbcImpl(); }else if(type4==4){ return new DepJpaImpl(); } return null; } }實現類:
12345678910package cn.hncu.pattern.dao.impl.a.rdb.oracle.ejb; import cn.hncu.pattern.dao.dao.DepDAO; public class DepEjbImpl implements DepDAO{ @Override public void create(String userId, String name) { System.out.println("利用DepEjbImpl向數據庫寫入:"+userId+","+name); } } 12345678910package cn.hncu.pattern.dao.impl.a.rdb.oracle.hibernate; import cn.hncu.pattern.dao.dao.DepDAO; public class DepHibernateImpl implements DepDAO{ @Override public void create(String userId, String name) { System.out.println("利用DepHibernateImpl向數據庫寫入:"+userId+","+name); } } 12345678910package cn.hncu.pattern.dao.impl.a.rdb.oracle.jdbc; import cn.hncu.pattern.dao.dao.DepDAO; public class DepJdbcImpl implements DepDAO{ @Override public void create(String userId, String name) { System.out.println("利用DepJdbcImpl向數據庫寫入:"+userId+","+name); } } 12345678910package cn.hncu.pattern.dao.impl.a.rdb.oracle.jpa; import cn.hncu.pattern.dao.dao.DepDAO; public class DepJpaImpl implements DepDAO{ @Override public void create(String userId, String name) { System.out.println("利用DepJpaImpl向數據庫寫入:"+userId+","+name); } }測試:
123456789101112package cn.hncu.pattern.dao; import cn.hncu.pattern.dao.dao.DepDAO; import cn.hncu.pattern.dao.factory.F1Factory; //本類是dao層的用戶,相當于邏輯層 public class Client { public static void main(String[] args) { DepDAO dao = F1Factory.getDepDAO(); dao.create("1001", "Jack"); } }測試結果:
1利用DepEjbImpl向數據庫寫入:1001,Jack【java設計模式:DAO模式】相關文章:
JAVA設計模式之單例模式11-23
解析Java的設計模式編程之解釋器模式的運用11-23
Java的設計模式編程中責任鏈模式的運用的實例講解12-01
該怎么使用Java設計模式編程中的OCP開閉原則?11-23
簡單講解Java的Future編程模式方案11-25
Java開發策略模式的簡單應用實現方法11-30
PHP中的設計模式詳解08-15
C語言編程中使用設計模式中的原型模式的講解11-19
photoshop柔光模式和疊加模式的運用教程11-15
海關通關作業新模式11-12
这里有更多你想看的
|
- 上一篇:漢語專業自薦書 漢語言文學專業自薦書模板 大學生
- 下一篇:返回列表