如何避免在Singleton对象上一直调用getInstance()?

时间:2015-03-09 23:25:27

标签: java methods static singleton instance

我有一个管理用户状态的单例类,假设它叫做UserStateManager。有一些我想调用的方法,如登录和注销。但是,似乎我总是要做这样的事情:

UserStateManager.getInstance().login(user);
UserStateManager.getInstance().logout();

但我想做一些像这样的事情:

UserStateManager.login(user);
UserStateManager.logout();

并且有一个静态登录和注销方法来处理获取单例实例。但与此同时,我希望实例方法仍然可用,以防我使用单例执行多项操作:

UserStateManager usm = UserStateManager.getInstance();
usm.login(user);
usm.setLocation(location);
usm.setVerified(true);

但是,Java不允许静态和实例方法以相同的签名存在。它似乎允许你从实例调用静态方法,但是即使我从一个实例调用方法,我也必须调用getInstance(),这看起来很傻,但也许这是最好的选择?人们在这种情况下做了什么?只是忍受它并在所有地方调用getInstance()?

1 个答案:

答案 0 :(得分:0)

我知道这篇文章很老,但是拥有额外的成员功能呢?

static void login() { getInstance().login() }

可以用作:

UserStateManager::login()

但是如果有很多需要包装的功能,那将是一团糟...