我正在使用CXF为Web服务编写客户端库。该服务使用可变密钥来管理会话,并且可选地允许会话保持活动。
我已经构建了一个客户端Client
,我想提供使用库来选择会话管理类型的能力,即管理密钥但不试图保持活动的经理和经理它管理密钥并使会话保持活动状态。
我原本想过在SessionManager
类(Client
类和SimpleSessionManager
类)中有一个KeepAliveSessionManager
字段,但为了让会话保持活动状态,KeepAliveSessionManger
必须调用Client
类的方法。这意味着Client
类具有对SessionManager
类的引用,而SessionManager
类将引用Client
类 - 这显然是一种不优雅的设计。
你能否建议一种设计模式(或altnernate实现),让我以“更好”的方式实现这些功能?
干杯,
皮特
答案 0 :(得分:0)
您可以将SessionManager用作“客户端”的工厂,该客户端将返回客户端的接口。 客户端不需要“知道”SessionManager。如果SessionMaAnager是KeepAliveSessionMaanger,它将在内部使会话保持活动状态。
这样的事情:
SessionManager sm = new KeepAliveSessionManager(int keepAliveTimeout);
IClient client = sm.GetClient();
client.InvokeSomeMethod();
SessionManager在内部使用线程(或其他东西)和客户端来保持会话活动。客户端永远不会“知道”SessionManager ..
顺便说一下,我在想.NET,但它应该转换为java ...