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:我刚刚在 hibernate 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”结尾的对象通常被认为是工厂模式的实现,它本质上是创建对象的新实例。在您的示例中不是这种情况,因为它管理特定服务的会话。

这个例子的好处是,事实上你的第一个静态方法调用getManager实际上是一个工厂,因为它创建了Manager对象的实例。

于 2009-12-01T10:28:19.577 回答