<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java語言

    java設計模式:DAO模式

    時間:2025-03-13 03:43:39 java語言 我要投稿
    • 相關推薦

    java設計模式:DAO模式

      導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。下面我們來看看DAO模式,希望對大家有所幫助。

      DAO設計模式

      ★ DAO的理解

      1、DAO其實是利用組合工廠模式來解決問題的,并沒有帶來新的功能,所以學的其實就是個思路。

      2、DAO理論上是沒有層數限制的。

      3、DAO的各層理論上是沒有先后的。

      ★ DAO模式的本質

      一層屏蔽一種變化

    1
    2
    3
    4
    5
    6
    <strong>★DAO基礎          
    DAO模式是標準的J2EE設計模式之一.開發人員使用這個模式把底層的數據訪問操作和上層的商務邏輯分開.一個典型的DAO實現有下列幾個組件:          
    1. 一個DAO工廠類;          
    2. 一個DAO接口;          
    3. 一個實現DAO接口的具體類;          
    4. 數據傳遞對象(有些時候叫做值對象).</strong>          

      下面舉例(多層dao接口的實現)

      具體實現:

      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工廠

    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;//第一層工廠的選擇類型,按理應該從用戶的配置信息中讀取,我們這里模擬了          
           if(type1==1){          
               return F2AFactory.getDepDAO();          
           }else if(type1==2){          
               return F2BFactory.getDepDAO();          
           }          
           return null;          
       }          
    }          

      3.dao實現接口

      第二層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;// 第二層工廠的選擇類型,按理應該從用戶的配置信息中讀取,我們這里模擬了          
           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層工廠的選擇類型,按理應該從用戶的配置信息中讀取,我們這里模擬了          
           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層工廠的選擇類型,按理應該從用戶的配置信息中讀取,我們這里模擬了          
                     
           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;          
       }          
    }          

      實現類:

    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向數據庫寫入:"+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向數據庫寫入:"+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向數據庫寫入:"+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向數據庫寫入:"+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;          
    //本類是dao層的用戶,相當于邏輯層          
    public class Client {          
       public static void main(String[] args) {          
           DepDAO dao = F1Factory.getDepDAO();          
           dao.create("1001", "Jack");          
       }          
    }          

      測試結果:

    1
    利用DepEjbImpl向數據庫寫入:1001,Jack          

    【java設計模式:DAO模式】相關文章:

    PHP和DAO設計模式11-11

    java設計模式:多例模式08-12

    java設計模式:裝飾模式07-08

    java設計模式:工廠模式11-07

    JAVA設計模式之單例模式07-29

    Java單例設計模式09-27

    解析Java的設計模式編程之解釋器模式的運用05-19

    Java的設計模式編程中責任鏈模式的運用的實例講解07-07

    Java的結構型模式07-09

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人