因素DAO我想創建一個工廠,返回道例如,根據clazz類如何使用類參數
Teammember,場景和裝備是我的模型類。
吾道的是這樣的:
public class JDBCTeammemberDAO implements JdbcDAO<Teammember>
我廠是這樣的:
public class DAOFactory {
JdbcDAO createDAO(Class clazz) {
if(clazz.equals(Teammember.class)) {
return new JDBCTeammemberDAO();
}
if(clazz.equals(Scene.class)) {
return new JDBCSceneDAO();
}
if(clazz.equals(Equipment.class)) {
return new JDBCEquipmentDAO();
}
return null;
}
}
我在想切換和多態,但我無法弄清楚如何。
基本上我想找到實現「SomeClass的實現JdbcDAO」
我的第一種方法是:
String name = clazz.getName().substring(6); // model.Teammember
Class<?> forName;
try {
forName = Class.forName("dao.jdbc.JDBC" + name + "DAO");
return (JdbcDAO) forName.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
,但我不覺得很好用字符串的方法處理這個。另外,如果我有不同的Model和Dao名稱(例如:JDBCMemberDAO,而不是JDBCTeammemberDAO),它不起作用
但我如何獲得正確的DAO?通過使用'JdbcDAOImpl equipmentDao = new JdbcDAOImpl ()'?我想爲我的服務類建立一個工廠,它不應該關心它得到哪一個。 (特別是如果我想嘲笑它) –
MartinL
如果有一個工廠是您的設計的核心,那麼上面的代碼不會幫助你。但是,我也質疑爲什麼你需要特定於模型的DAO。 – Perception
這不是我的核心。我需要一種方法來模擬/存根我的服務類。我們僅在學校與工廠學習 - 如果您有更好的想法,我願意接受您。 – MartinL