- 相關(guān)推薦
java設計模式:DAO模式
導語(yǔ):Java是一門(mén)面向對象編程語(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強大和簡(jiǎn)單易用兩個(gè)特征。下面我們來(lái)看看DAO模式,希望對大家有所幫助。
DAO設計模式
★ DAO的理解
1、DAO其實(shí)是利用組合工廠(chǎng)模式來(lái)解決問(wèn)題的,并沒(méi)有帶來(lái)新的功能,所以學(xué)的其實(shí)就是個(gè)思路。
2、DAO理論上是沒(méi)有層數限制的。
3、DAO的各層理論上是沒(méi)有先后的。
★ DAO模式的本質(zhì)
一層屏蔽一種變化
1 2 3 4 5 6 | <strong>★DAO基礎 DAO模式是標準的J2EE設計模式之一.開(kāi)發(fā)人員使用這個(gè)模式把底層的數據訪(fǎng)問(wèn)操作和上層的商務(wù)邏輯分開(kāi).一個(gè)典型的DAO實(shí)現有下列幾個(gè)組件: 1. 一個(gè)DAO工廠(chǎng)類(lèi); 2. 一個(gè)DAO接口; 3. 一個(gè)實(shí)現DAO接口的具體類(lèi); 4. 數據傳遞對象(有些時(shí)候叫做值對象).</strong> |
下面舉例(多層dao接口的實(shí)現)
具體實(shí)現:
1.dao接口:
1 2 3 4 5 | package cn.hncu.pattern.dao.dao; public interface DepDAO { public void create(String userId, String name); } |
2.dao工廠(chǎng)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package 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;//第一層工廠(chǎng)的選擇類(lèi)型,按理應該從用戶(hù)的配置信息中讀取,我們這里模擬了 if(type1==1){ return F2AFactory.getDepDAO(); }else if(type1==2){ return F2BFactory.getDepDAO(); } return null; } } |
3.dao實(shí)現接口
第二層dao
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package 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;// 第二層工廠(chǎng)的選擇類(lèi)型,按理應該從用戶(hù)的配置信息中讀取,我們這里模擬了 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; } } |
1 2 3 4 5 6 7 8 9 10 11 | package 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package 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層工廠(chǎng)的選擇類(lèi)型,按理應該從用戶(hù)的配置信息中讀取,我們這里模擬了 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package 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層工廠(chǎng)的選擇類(lèi)型,按理應該從用戶(hù)的配置信息中讀取,我們這里模擬了 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; } } |
實(shí)現類(lèi):
1 2 3 4 5 6 7 8 9 10 | package 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向數據庫寫(xiě)入:"+userId+","+name); } } |
1 2 3 4 5 6 7 8 9 10 | package 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向數據庫寫(xiě)入:"+userId+","+name); } } |
1 2 3 4 5 6 7 8 9 10 | package 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向數據庫寫(xiě)入:"+userId+","+name); } } |
1 2 3 4 5 6 7 8 9 10 | package 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向數據庫寫(xiě)入:"+userId+","+name); } } |
測試:
1 2 3 4 5 6 7 8 9 10 11 12 | package cn.hncu.pattern.dao; import cn.hncu.pattern.dao.dao.DepDAO; import cn.hncu.pattern.dao.factory.F1Factory; //本類(lèi)是dao層的用戶(hù),相當于邏輯層 public class Client { public static void main(String[] args) { DepDAO dao = F1Factory.getDepDAO(); dao.create("1001", "Jack"); } } |
測試結果:
1 | 利用DepEjbImpl向數據庫寫(xiě)入:1001,Jack |
【java設計模式:DAO模式】相關(guān)文章:
PHP和DAO設計模式11-11
java設計模式:多例模式08-12
java設計模式:裝飾模式07-08
java設計模式:工廠(chǎng)模式11-07
JAVA設計模式之單例模式07-29
Java單例設計模式09-27
Java的設計模式編程中責任鏈模式的運用的實(shí)例講解07-07
Java的結構型模式07-09