2010-11-16 3 views
0

Я пишу клиентскую библиотеку для веб-службы с использованием CXF. Служба использует измененный ключ для управления сеансами и, необязательно, позволяет сохранить сеанс.Java - шаблон дизайна, управление сеансом для клиента веб-службы

Я построил клиент Client, и я хочу предоставить возможность использования библиотеки для выбора своего типа управления сеансом, то есть либо менеджера, который управляет ключами, но не пытается сохранить жизнь, а менеджер, который управляет ключами и сохраняет сеанс в живых.

Я думал о имея SessionManager поле в Client классе (с SimpleSessionManager классом и KeepAliveSessionManager класса), но, для того, чтобы сохранить сессию живы, KeepAliveSessionManger бы вызвать метод Client класса. Это означало бы, что класс Client имеет ссылку на класс SessionManager, а класс SessionManager будет иметь ссылку на класс Client, что, очевидно, является неэлегантным дизайном.

Можете ли вы предложить шаблон дизайна (или альтернативную реализацию), который позволил бы мне реализовать эти функции «лучше»?

Приветствия,

Пит

ответ

0

Вы можете использовать SessionManager как фабрика для «клиентов», которые возвращают интерфейс для клиента. Клиенту не нужно «знать» SessionManager. И если SessionMaAnager был KeepAliveSessionMaanger, он внутренне сохранил бы сеанс.

Что-то вроде этого:

SessionManager sm = new KeepAliveSessionManager(int keepAliveTimeout); 

IClient client = sm.GetClient(); 
client.InvokeSomeMethod(); 

SessionManager внутренне использует нить (или что-то), и клиент, чтобы сохранить сессию в живых. Клиент никогда не «знает» о SessionManager.

BTW, я думаю в .NET, но он должен перевести на java ...