0

次のコードがあります:

PhotoFactory factory = PhotoFactory.getFactory (PhotoResource.PICASA);
PhotoSession session = factory.openSession (login, password);
PhotoAlbum album = factory.createAlbum ();
Photo photo = factory.createPhoto ();
album.addPhoto (photo);
if (session.canUpload ()) {
   session.uploadAlbum (album);
}
session.close ();

正しい名前を選んだかどうかわかりません。それはそれほど重要ではありませんが、私の場合、あなたが何を選んだのか興味があります。別のバージョンはマネージャーです:

PhotoManager manager = PhotoManager.getManager (PhotoResource.PICASA);
PhotoSession session = manager.openSession (login, password);
PhotoAlbum album = manager.createAlbum ();
Photo photo = manager.createPhoto ();
album.addPhoto (photo);
if (session.canUpload ()) {
   session.uploadAlbum (album);
}
session.close ();

UPD:休止状態のjavadocsで次の例を見つけました:

 Session sess = factory.openSession();
 Transaction tx;
 try {
     tx = sess.beginTransaction();
     //do some work
     ...
     tx.commit();
 }

それは命名ミスですか?

4

2 に答える 2

1

非常に高いレベルでは、クラスのインスタンスの作成のみを担当する場合は、ファクトリと呼びます。オブジェクトの継続的な存在、およびオブジェクトが他のオブジェクトとどのように関連しているかなどを監視する必要がある場合は、マネージャー。

投稿したコードスニペットでは、オブジェクトを作成しているだけなので、私の意見では、Factoryが適切な名前です。ただし、クラスの概念的な責任とは何か、そしてそれらが将来拡大する可能性があるかどうかを覚えておく必要があります。

とは言うものの、私は古典的に、ファクトリがセッション自体の作成について心配する必要はなくcreateFoo、必要に応じてセッションを呼び出しに渡すことを期待しているので、設定時に確かにいくつかのファッジ要因があります。個人的には、セッションの作成を担当する他の抽象エンティティがあり、それをPhotoFactoryに渡すと思います。

于 2009-12-01T10:26:33.600 に答える
0

'Factory'で終わるオブジェクトは一般に、オブジェクトの新しいインスタンスを作成するファクトリパターンの実装と見なされるため、2番目のソリューション(マネージャー)を選択します。これは、特定のサービスのセッションを管理するため、この例には当てはまりません。

この例の良い点は、実際には、最初の静的メソッド呼び出しgetManagerが実際にはファクトリであるということです。これは、Managerオブジェクトのインスタンスを作成するためです。

于 2009-12-01T10:28:19.577 に答える