在这里的具体情况中,
我有一个名为UserManger的管理器,用于处理用户的CRUD
这位经理是“单身人士”并且设计正确。
但是在更新方法中我有逻辑
public User update (User u)
{
// This line is problematic?
User u1 = new User();
copy(u,u1);
//Some logic
dao.update(u);
}
在单例管理器中创建任何新对象会有问题吗?特别是对于非常并发的系统。
将
public User update (User u, User u1)
{
copy(u,u1);
//Some logic
dao.update(u);
}
解决我的问题?
答案 0 :(得分:4)
在单例方法中创建对象不会导致任何问题。毕竟,你不是在线程之间共享任何状态。
如果你在单身人士中有状态,你就会遇到潜在的问题 - 但你所展示的只是创建本地变量,而不是改变实例变量。每次调用方法都有自己完全独立的局部变量集。两个线程都可以执行相同的方法,但它们不会看到彼此的局部变量。
答案 1 :(得分:0)
没有。但是,如果你把
User u1;
作为全局变量,会引起问题。
但我有一个问题,为什么不用这种方式编码?
public User update (User u)
{
//Some logic
User u = dao.update(u);
return u;
// OR return dao.update(u);
}
您无需在此处复制。在此方法中,副本将需要为User对象分配2倍的内存。
答案 2 :(得分:0)
在不了解您的系统的情况下,我不得不打电话询问此处描述的设计模式。 Singleton和SomethingManager都是反模式。
您可能只需要为UserManager
考虑一个更具描述性的名称,但我强烈建议您使用IoC这样的Spring框架将其注入需要的位置,而不是将其注入作为一个'全球'(这基本上就是一个单身人士)。