单例模式实现在线用户列表

这篇博客探讨了如何使用Java的单例模式来实现在线用户列表。通过UserList.java类和UserVO.java类的设计,当用户登录成功时,会将其信息添加到单例维护的在线用户列表中,确保全局唯一且线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在线用户列表UserList.java:

package edu.action.user;

import java.util.Enumeration;
import java.util.Vector;
import edu.vo.UserVO;

/**
 * 文件名称: UserList.java
 * 编写人: yh.zeng
 * 编写时间: 17-1-5 下午7:48
 * 文件描述: 已登录的用户列表(在线用户列表)
 */
public class UserList
{
    private static UserList userList = new UserList();

    private Vector<UserVO>  v = null;


    private UserList(){
        v = new Vector<UserVO>();
    }


    public static UserList getInstance(){
        return userList;
    }


    public void addUser(UserVO user){
        if(user != null && !v.contains(user)){
            v.add(user);
        }
    }

    public void removeUser(UserVO user){
        if(user != null){
            v.remove(user);
        }
    }

    public Enumeration<UserVO>  getUserList(){
        return v.elements();
    }

    public int getUserCount(){
        return v.size();
    }


}


 

用户信息UserVO.java:

package edu.vo;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import edu.action.user.UserList;

/**
 * 
 * @author yh.zeng
 * 文件描述: 1)往Session中存放Users对象,则自动往UserList用户列表中添加该用户
 *          2)Session中移除Users对象,则自动从UserList用户列表中移除该用户
 */
public class UserVO implements java.io.Serializable,  HttpSessionBindingListener  {
	
	private static final long serialVersionUID = 7132790140796457462L;
	
	// Fields
	private Integer id;
	private String username;
	private String password;

	// Property accessors

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
         UserList.getInstance().addUser(this);
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
         UserList.getInstance().removeUser(this);
    }
    

}


 

 

接着,用户登陆的Action,登陆成功之后,添加以下代码:

session.setAttribute("user", uservo);


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值