我正在使用CXF为web服务编写一个客户端库。该服务使用可变密钥来管理会话,并允许会话保持活动状态。
我已经构建了一个客户端Client,并且我想为库的使用者提供选择其会话管理类型的能力,即,一个管理器只管理密钥但不试图保持活动状态,另一个管理器管理密钥并保持会话活动状态。
我曾经想过在Client类中有一个SessionManager字段(有一个SimpleSessionManager类和一个KeepAliveSessionManager类),但是为了使会话保持活动状态,KeepAliveSessionManger必须调用Client类的方法。这意味着Client类引用了SessionManager类,而SessionManager类引用了Client类-这显然是一种不优雅的设计。
你能推荐一个设计模式(或altnernate实现),让我以一种“更好”的方式实现这些功能吗?
干杯,
皮特
发布于 2011-01-19 20:41:20
您可以使用SessionManager作为“客户端”的工厂,它将为客户端返回一个接口。客户端不需要“知道”SessionManager。如果SessionMaAnager是一个KeepAliveSessionMaanger,它将在内部保持会话活动。
如下所示:
SessionManager sm = new KeepAliveSessionManager(int keepAliveTimeout);
IClient client = sm.GetClient();
client.InvokeSomeMethod();SessionManager在内部使用线程(或其他东西)和客户端来保持会话活动。客户端永远不会“知道”SessionManager..
顺便说一句,我在想.NET,但它应该翻译成java…
https://stackoverflow.com/questions/4193829
复制相似问题