单身设计&里面的新物件

时间:2011-05-24 06:24:25

标签: java singleton

在这里的具体情况中,

我有一个名为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);
}

解决我的问题?

3 个答案:

答案 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)

在不了解您的系统的情况下,我不得不打电话询问此处描述的设计模式。 SingletonSomethingManager都是反模式。

您可能只需要为UserManager考虑一个更具描述性的名称,但我强烈建议您使用IoC这样的Spring框架将其注入需要的位置,而不是将其注入作为一个'全球'(这基本上就是一个单身人士)。