クラスclazzに応じてdao-instanceを返すファクトリを作成したいクラスパラメータを使ってdaoを因数分解する方法
チームメンバー、シーンと設備は私のモデルクラスです。
私のDAOの次のようになります。
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;
}
}
私はスイッチおよび多型を考えていたが、私は方法を見つけ出すことができませんでした:
public class JDBCTeammemberDAO implements JdbcDAO<Teammember>
私の工場はこのようになります。
基本的に私は、インプリメンテーションを見つけたい「工assが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();
}
が、私は文字列の方法でこれを処理して良い感じはありません。また、モデルとDAOの名前が異なる場合(JDBCTeamemberDAOの代わりにJDBCMemberDAO)、
しかし、どのようにして正しいDAOを取得できますか? 'JdbcDAOImpl equipmentDao = new JdbcDAOImpl ()'を使って?私は自分のサービスクラスの工場を望んでいます。それはどちらが得られるか気にするべきではありません。 (特に私が模擬したいのであれば) –
MartinL
あなたの設計の中核をなすのは、上記のコードはあなたを助けません。しかし、私はまた、モデル固有のDAOが必要な理由についても疑問を呈します。 – Perception
それは私の中心ではありません。サービスクラスを模擬したりスタブしたりする方法が必要です。学校でしか工場で学んだことはありません。もし私があなたに任せていれば、もっと良いアイデアがあります。 – MartinL