1. 程式人生 > >使用單例和工廠設計模式實現dao實現層的解耦

使用單例和工廠設計模式實現dao實現層的解耦

建立Dao具體例項的工廠:  
      工廠解耦: 只需在配置檔案中改動,而不需要修改原始碼
                      各層之間耦合性極低
      使用的設計模式: 單例 和 工廠
                     
*******************************************************************************************
src下面建立一個檔案dao.properties
userDao=com.itheima.dao.impl.UserDaoMySQLImpl1(實現類的路徑)


*******************************************************************************************


public class DaoFactory {

        // 使用餓漢式建立單例類
        private static DaoFactory instance = new DaoFactory();
        private DaoFactory(){}
        public static DaoFactory getInstance(){
                return instance;
        }
                
        // spring的設計思想
        // 讀取配置檔案中輸入的Dao實現方式類的全名稱來設定Dao的實現方式
        private static String userDaoImplClassName;
        static{
                try {
                        InputStream in = DaoFactory.class.getClassLoader().getResourceAsStream("dao.properties");
                        Properties props = new Properties();
                        props.load(in);
                        userDaoImplClassName = props.getProperty("userDao");
                } catch (IOException e) {
                        e.printStackTrace();
                } 
        }
        
        // 使用工廠設計模式來獲取Dao的多種實現方式
        public UserDao getUserDao(){
                try {
                        return (UserDao) Class.forName(userDaoImplClassName).newInstance();
                }catch(Exception e) {
                        throw new RuntimeException(e);
                }
        }

}
*******************************************************************************************
有三個dao實現類:
      UserDaoDom4jImpl
      UserDaoMySQLImpl
      UserDaoMySQLImpl1
 通過工廠修改service實現呼叫的dao介面即可,如下:
      // 使用修改配置檔案中dao實現方式的類名稱來獲取dao的實現方式
      private UserDao dao = DaoFactory.getInstance().getUserDao();


*******************************************************************************************