我有下一个代码:
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();
}
这是一个命名错误吗?
答案 0 :(得分:1)
在非常高的层次上,如果它只负责创建类的实例,我称之为工厂;和管理者是否需要监督对象的持续存在,以及它们与其他对象的关系等。
在您发布的代码段中,您只是创建了对象,因此,在我看来,Factory是一个合适的名称。虽然你应该记住班级的概念职责是什么,以及他们将来是否会扩展。
也就是说,我经常希望工厂不必担心自己创建会话,而是根据需要将会话传递到createFoo
个调用中,因此在设置时肯定会有一些软糖因素。我个人认为我会有一些其他抽象实体负责创建会话,然后将它们传递到PhotoFactory。
答案 1 :(得分:0)
我会选择第二个解决方案(管理器),因为以“Factory”结尾的对象通常被认为是工厂模式的实现,它实际上创建了对象的新实例。在您的示例中不是这种情况,因为它管理特定服务的会话。
在这个例子中有什么好处,实际上你的第一个静态方法调用getManager
实际上是一个工厂,因为它创建了Manager
个对象的实例。