java設計模式:DAO模式
- java語言
- 關注:1.29W次
導語: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接口的實現)
具體實現:
接口:
12345 | package ; public interface DepDAO { public void create(String userId, String name); } |
工廠
12345678910111213141516171819 | package ory; import AO; import ory.F2AFactory; import ory.F2BFactory; public class F1Factory { private F1Factory(){ } public static DepDAO getDepDAO(){ int type1= 1 ; //第一層工廠的選擇類型,按理應該從用户的配置信息中讀取,我們這裏模擬了 if (type1== 1 ){ return epDAO(); } else if (type1== 2 ){ return epDAO(); } return null ; } } |
實現接口
第二層dao
12345678910111213141516171819202122232425 | package ory; import AO; import ory.F3A_RDB_Factory; import ory.F2BFactory; public class F2AFactory { private F2AFactory() { } public static DepDAO getDepDAO() { int type2 = 3 ; // 第二層工廠的選擇類型,按理應該從用户的配置信息中讀取,我們這裏模擬了 if (type2 == 1 ) { //return F3A_File_epDAO(); } else if (type2 == 2 ) { //return F3A_ODB_epDAO(); } else if (type2 == 3 ) { return F3A_RDB_epDAO(); } else if (type2 == 4 ) { //return F3A_XML_epDAO(); } return null ; } } |
1234567891011 | package ory; import AO; public class F2BFactory { private F2BFactory(){ } public static DepDAO getDepDAO(){ return null ; } } |
第三層dao
123456789101112131415161718192021 | package ory; import AO; import ory.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_epDAO(); } else if (type3== 2 ){ return F4A_RDB_Oracle_epDAO(); } else if (type3== 3 ){ //return F4A_RDB_XML_epDAO(); } return null ; } } |
第四層dao
123456789101112131415161718192021222324252627 | package ory; import AO; import jbImpl; import ibernateImpl; import dbcImpl; import paImpl; 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 ; } } |
實現類:
12345678910 | package ; import AO; public class DepEjbImpl implements DepDAO{ @Override public void create(String userId, String name) { tln( "利用DepEjbImpl向數據庫寫入:" +userId+ "," +name); } } |
12345678910 | package rnate; import AO; public class DepHibernateImpl implements DepDAO{ @Override public void create(String userId, String name) { tln( "利用DepHibernateImpl向數據庫寫入:" +userId+ "," +name); } } |
12345678910 | package ; import AO; public class DepJdbcImpl implements DepDAO{ @Override public void create(String userId, String name) { tln( "利用DepJdbcImpl向數據庫寫入:" +userId+ "," +name); } } |
12345678910 | package ; import AO; public class DepJpaImpl implements DepDAO{ @Override public void create(String userId, String name) { tln( "利用DepJpaImpl向數據庫寫入:" +userId+ "," +name); } } |
測試:
123456789101112 | package ; import AO; import ory.F1Factory; //本類是dao層的用户,相當於邏輯層 public class Client { public static void main(String[] args) { DepDAO dao = epDAO(); te( "1001" , "Jack" ); } } |
測試結果:
1 | 利用DepEjbImpl向數據庫寫入: 1001 ,Jack |
- 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-hk/jsj/java/ejmw3o.html