如何解决单例设计及其内部的新对象
| 在这里的特定情况下, 我有一个名为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 \'(本质上就是单身汉是)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。