我在2001年的书中将此称为“远程会话”模式。注册表中的远程对象是一种仅输出
login()方法的登录服务器。
login()如果成功,该方法将在每次调用时返回一个新的远程对象,该对象基本上是每个客户端的远程会话对象。此会话对象可以导出一个
logout()方法,该方法本身不会导出,也可以实现
Unreferenced,该
unreferenced()方法本身也可以导出(或者您可以依靠DGC来实现相同的目的:使用
Unreferenced,您有机会对其进行记录)。此远程会话对象导出已登录客户端应有权访问的所有远程方法,并且由于它是每个客户端,因此可以保留客户端状态,因此它是一个会话。
public interface RemoteLogin extends Remote{ RemoteSession login() throws RemoteException;}public interface RemoteSession extends Remote{ void logout() throws RemoteException; void myMethod(...) throws RemoteException; // whatever you need}public class RemoteLoginImpl extends UnicastRemoteObject implements RemoteLogin{ // ... public RemoteSession login() { // ... return new RemoteSessionImpl(); // whatever arguments you need }}public class RemoteSessionImpl extends UnicastRemoteObject implements RemoteSession, Unreferenced{ // ...}


