单例设计及其内部的新对象

问题描述

| 在这里的特定情况下, 我有一个名为Usermanger的管理器,用于为用户处理CRUD 该经理是“ Singleton”,经过设计正确。 但是在更新方法我有逻辑
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);
}
解决我的问题?     

解决方法

仅在单例方法内创建对象不会引起任何问题。毕竟,您不共享线程之间的任何状态。 如果您在单例内部存在状态,则可能会遇到问题-但是您所展示的只是创建一个局部变量,而不更改实例变量。方法的每次调用都有其自己完全独立的局部变量集。两个线程都可以执行相同的方法,但是它们不会看到彼此的局部变量。     ,不,但是如果你把
User u1;
作为全局变量,将引起问题。 但是我有一个问题,为什么不这样编码?
public User update (User u) 
{

    //Some logic
    User u = dao.update(u);
    return u;
    // OR return dao.update(u);
}
您无需在这里复制。在这种方法中,执行复制操作将需要为User对象分配2倍以上的内存。     ,在不了解您的系统的情况下,我不得不打电话询问这里描述的设计模式。 Singleton和SomethingManager都是反模式。 您可能只需要考虑
UserManager
的更具描述性的名称,但我强烈建议使用像Spring这样的IoC框架将其注入到需要的位置,而不是将其固定为\'global \'(本质上就是单身汉是)。