锁定老帖子 主题:如此使用单例模式!
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-20
public class User { private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } } public class UserRule { private static UserRule instance = null; public static UserRule getInstance() { if (instance == null) { instance = new UserRule(); } return instance; } public User AddUser(String userName) { // add a new user operations } } 先不说问题,来看看这样做的一些可取之处: 1、设计简单。系统的设计在这样的结构下其实就是贫血类的设计,剩下的就是在Rule类中增加相应的方法。 2、各个模块的开发可以同时进行。各人根据要求定义好模块相应的类,剩下的就是缺啥补啥了。 然后说问题: 1、首先该单例实现就有问题了,这样的实现并不能保证线程安全。不过好在其实这个UserRule本身也没有字段之类的东西,不单例其实也没多大影响。所以我想这个单例丢在这里估计只是为了写代码的时候方便点。 2、这种做法应对需求变化的结果就是不断的在UserRule中添加新的满足需求的方法,最后天知道这个方法到底干嘛的。 3、我想这样的系统应该性能上很差了,可奇怪客户用到现在居然没一点性能上的反馈。不过性能这块只是我的一个感觉,还没有对这样的系统做一个压力测试,无法提供实际情况。 不知道还有没有其他的缺点,欢迎各位来分析分析。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-20
new UserRule()就可以了 好像不能做到单例哦
|
|
返回顶楼 | |
发表时间:2009-01-20
为什么一定要线程安全? 你没说明user这个被调用的情景。如果有可能出现大家同时调用这个类的情况做次压力测试,异常很容易就报出来了。
|
|
返回顶楼 | |
发表时间:2009-01-20
好像还是不是单例
|
|
返回顶楼 | |
发表时间:2009-01-21
lz从哪里看出性能问题的? 这么几行代码,除了构造方法不是private,我没有看出别的问题
|
|
返回顶楼 | |
发表时间:2009-01-21
什么样的要求,一定要要保证线程安全吗?
几行代码能看出性能问题吗? 楼主似乎有更好的办法,不妨贴出来,我也学习一下! |
|
返回顶楼 | |
发表时间:2009-01-21
引用 性能是测试出来的 不是你想出来的
赞这句 |
|
返回顶楼 | |
发表时间:2009-01-21
kimmking 写道 引用 性能是测试出来的 不是你想出来的
赞这句 同意哈~ |
|
返回顶楼 | |
发表时间:2009-01-21
这个不应该和单例模式扯上关系,这中写法是对象创建的一种方式,好处请参考《effective Java》之对象的创建和销毁
|
|
返回顶楼 | |
发表时间:2009-01-21
# public static UserRule getInstance() {
# if (instance == null) { # instance = new UserRule(); # } # return instance; # } 应该写成 public static UserRule getInstance() { if (instance == null) { synchronized(UserRule.class){ if (instance == null){ instance = new UserRule(); } } } return instance; } 以保证多个线程访问的安全 |
|
返回顶楼 | |