2011-06-19 9 views
31

ファクトリメソッドと抽象ファクトリメソッドは認識していますが、DAOファクトリパターンをJavaで作成したいと考えています。DAO工場パターンとは何ですか?

  1. 私はその重要性を知りたいです。
  2. その使用

私はthis linkをチェックしましたが、私が理解することは困難です。

例の助けを借りて誰でも説明できますか?

public interface UserDAO { 
    public void insert(User user); 
    public void update(User user); 
    public void delete(int userId); 
} 

実装:

public class UserDAOImpl implements UserDAO { 
    @Override 
    public void delete(int userId) { 
     // delete user from user table 
    } 

    @Override 
    public User[] findAll() { 
     // get a list of all users from user table 
     return null; 
    } 

    @Override 
    public User findByKey(int userId) { 
     // get a user information if we supply unique userid 
     return null; 
    } 

    @Override 
    public void insert(User user) { 
     // insert user into user table 
    } 

    @Override 
    public void update(User user) { 
     // update user information in user table 
    } 
} 

工場:

public class UserDAOFactory { 
    public static UserDAO getUserDAO(String type) { 
     if (type.equalsIgnoreCase("jdbc")) { 
      return new UserDAOImpl(); 
     } else { 
      return new UserDAOImpl(); 
     } 
    } 
} 

クライアント側コード:編集

:私はそれを理解し、ここでは、DAOパターンの一例である

User user=new User(); 
user.setName("Jinoy P George"); 
user.setDesignation("Programmer"); 
user.setAge(35); 
//get a reference to UserDAO object 
UserDAO userDAO=UserDAOFactory.getUserDAO("jdbc"); 
//call insert method by passing user object 
userDAO.insert(user); 

このパターンは正しいですか?

どこで接続を開いて閉じるべきですか?

+5

'MammalsFactory'は' SQL'と 'Oracle'を作成しますか?興味深い;) –

+0

http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.htmlのセクション「抽象ファクトリパターンの使用」のサンプルコードをすでにチェックしていますか? – joschi

+0

はい、私は理解できません。 – coder25

答えて

17

おそらく、コードがどのように動作するのかわかりません。それはいいようです。

だけFYI:あなたはUserDAOMySQLImplとUserDAOMSSQLImplなどの別の新しいものとして、それを命名考慮すればUserDAOImplとして定義されて何

  • をよりよく理解することができる、というように、それぞれのデータベース・アクセスのために必要となる可能性があります。

  • これらのそれぞれでは、接続を処理し、必要な場合があり、強制的にインターフェイス(UserDAO)で宣言する必要がない特定のデータベースサーバー構成に対してプライベート関数のようなものを追加する必要がありますが、

`

public class UserDAOFactory{ 

    public static UserDAO getUserDAO(String type){ 
     if (type.equalsIgnoreCase("mysql")){ 
      return new UserDAOMySQLImpl(); 
     }else{ 
      return new UserDAOMSSQLImpl(); 
     } 
    } 
} 

少し明確:インタフェースで定義されたすべての方法は、その後、工場(UserDAOFactory)の条件で、あなたはこのような何かを持っているだろうか?

その後、代わりのようにハードコードされた行のクライアント側で:あなたはプロパティを動的にDAOを切り替えることができるようにファイルを持つことができ

UserDAO userDAO=UserDAOFactory.getUserDAO("jdbc"); 

、プロパティからその文字列を取得したあなたは、単に可能なファイル

UserDAO userDAO=UserDAOFactory.getUserDAO(myStringFromPropertiesFile); 

myStringFromPropertiesFileは、あなたのプロパティファイルでの定義によると「mysqlの」または「MSSQL」が含まれますか。

希望すると便利です。

24

DAOは、 "データアクセスオブジェクト"の略です。これは、特定のオブジェクトのリレーショナルデータベースを使用してすべてのCRUD操作を処理するインターフェイスベースのクラスです。ここでは、ジェネリック医薬品の使用例です:

package persistence; 

public interface GenericDao<K extends Serializable, T> 
{ 
    public T find(K id); 
    public List<T> find(); 
    public K save(T value); 
    public void update(T value); 
    public void delete(T value); 
} 

は、「仮想コンストラクタ」として工場を考える:その作成方法は、インターフェイスタイプを返しますが、あなたは、必要に応じて異なる実装をいくつでも作成することを求めることができます。

+0

ジェシックスを使用したくない – coder25

+1

@prema - これは問題ありません。ジェネリックを使う必要はありません。 –

+17

@prema:これは*私のコード*ウェブサイトではありません。それでも理解できない場合は、特定の質問をしてください。 –

関連する問題