浏览 1976 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-28
[1]. 传统的单件模式 public class UserSession { private Integer number = 0; private static UserSession instance = new UserSession(); public static getInstance() { return instance ; } public Integer getNumber() { this.number++; // 取一次值,就++ return this.number; } } 开着多个IE测试,你将会发现,多个IE任一调用getNumber(),那么,这个值会一直加。这说明普通的单件模式在RAP上要小心应用。 还好RAP提供了一个很简单的解决方案。就是:SessionSingletonBase. SessionSingletonBase是抽象类,需要自定义的Session类去继承它。它的子类能提供针对一个user 上下文的唯一实体,也就是在一个user context中调用getInstance(Class)将会一直得到同一个对象实体,但对于不同user的context却会得到不同的对象实体。 [1]. 定义具体的Session类 public class UserSession extends SessionSingletonBase { private Integer number = 0; // 只是一个简单的针对单个用户的计数器 // User currentUser; 你需要的也许是这样有意义的属性 // Date loginTime; private UserSession() { } public static UserSession getInstance() { return (UserSession) SessionSingletonBase.getInstance(UserSession.class); } public Integer getNumber() { this.number++; // 取一次值,就++. 当然,你也可以改成一个setNumber方法。 return this.number; } } 请注意中间的这段代码,这就是关键.SessionSingletonBase.getInstance(UserSession.class)如果值存在就一直返回这个,如果不存在将会new一个UserSession返回。 public static UserSession getInstance() { return (UserSession) SessionSingletonBase.getInstance(UserSession.class); } [2]. 自定义Session类的使用 // 拿值 UserSession.getInstance().getNumber(); 好了,你可以开多个IE去测试,看看,每个UserSession的number是否只与单个IE相关联。 ################### RAP[1]RAP环境的安装 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |