Service Locator модели
Service Locator шаблон (шаблон Service Locator) для использования в позиционировании мы хотим использовать JNDI служб поиска, когда. Принимая во внимание JNDI подстановок высокую цену за услугу, в Service Locator шаблонов в полной мере использовать технологии кэширования. В первом запросе службы, службы в локатора службы JNDI поиска, и кэширует объект службы. При повторном запросе тот же сервис, локатор службы выглядит в своем кэше, что может повысить производительность приложений в значительной степени. Следующее является объектом данного шаблона проектирования.
- Сервис (Service) - услуги на самом деле обработку запроса.Ссылки на эти услуги можно найти на сервере JNDI.
- Контекст / исходный контекст - контекст JNDI с услугой вы хотите найти ссылку.
- Локатор службы (Service Locator) - служба поиска через JNDI поиск и служб кэширования , чтобы получить единую точку контакта службы.
- Кэш (Cache) - ссылка на услуги хранения кэша, для того , чтобы повторно использовать их.
- Клиент (Client) - клиент объект вызов службы через ServiceLocator.
реализация
Мысоздадим,InitialContext поискасервиса,кэш, Сервис как субъект представляет собой различные объекты.Service1иService2представляют услуги сущностей.
ServiceLocatorPatternDemo,наш демонстрационный класс здесь в качестве клиента, будет использоваться для демонстрацииServiceLocatorобслуживания шаблон проектирования локатор.
Шаг 1
Создание сервисного интерфейса Service.
Service.java
открытый интерфейс Service { Строка GetName общественности (); общественного недействительными выполнить (); }
Шаг 2
Создайте объект сервиса.
Service1.java
Открытый класс Service1 реализует службу { общественного недействительными выполнить () { System.out.println ( "Выполнение Service1"); } @Override Строка GetName общественности () { вернуть "Service1"; } }
Service2.java
Открытый класс Service2 реализует службу { общественного недействительными выполнить () { System.out.println ( "Выполнение сервис2"); } @Override Строка GetName общественности () { вернуть "сервис2"; } }
Шаг 3
Создание запроса для JNDI InitialContext.
InitialContext.java
Открытый класс InitialContext { поиск общественного объекта (String jndiName) { если (jndiName.equalsIgnoreCase ( "Service1")) { System.out.println ( "Глядя вверх и создания нового объекта Service1"); вернуть новый Service1 (); } Иначе, если (jndiName.equalsIgnoreCase ( "сервис2")) { System.out.println ( "Глядя вверх и создания нового объекта сервис2"); вернуть новый сервис2 (); } возвращать нуль; } }
Шаг 4
Создание кэша Cache.
Cache.java
импорт java.util.ArrayList; импорт java.util.List; Открытый класс Cache { частные Список <Услуги> услуги; общественного кэша () { услуги = новый ArrayList <Сервис> (); } общественная служба GetService (String ServiceName) { для (услуга Услуга:) { если (service.getName (). equalsIgnoreCase (ServiceName)) { System.out.println ( "Возвращение кэшируются" + ServiceName + "объект"); обслуживание возвращения; } } возвращать нуль; } общественного недействительными addService (Service newService) { булево существует = ложь; для (услуга Услуга:) { если (service.getName (). equalsIgnoreCase (newService.getName ())) { существует = верно; } } если (! существует) { services.add (newService); } } }
Шаг 5
Создать локатор сервиса.
ServiceLocator.java
Открытый класс ServiceLocator { собственный кэш статического кэша; статические { кэш = новый кэш (); } общественности статической служба GetService (String jndiName) { Сотрудники службы = cache.getService (jndiName); если (услуга! = NULL) { обслуживание возвращения; } InitialContext контекст = новый InitialContext (); Услуги service1 = (Service) context.lookup (jndiName); cache.addService (service1); вернуть Service1; } }
Шаг 6
Используйте для демонстрации поискасервисашаблон проектирования службы локатора.
ServiceLocatorPatternDemo.java
Открытый класс ServiceLocatorPatternDemo { государственной статической силы основных (String []) {агдз Сотрудники службы = ServiceLocator.getService ( "Service1"); service.execute (); обслуживание = ServiceLocator.getService ( "Service2"); service.execute (); обслуживание = ServiceLocator.getService ( "Service1"); service.execute (); обслуживание = ServiceLocator.getService ( "Service2"); service.execute (); } }
Шаг 7
Проверьте выход.
Глядя вверх и создания нового объекта Service1 Выполнение Service1 Глядя вверх и создания нового объекта сервис2 Выполнение сервис2 Возвращение кэшированный объект Service1 Выполнение Service1 Возвращение кэшированный объект сервис2 Выполнение сервис2