padrão Locator Service
padrão Locator Service (Service Locator Padrão) para uso no posicionamento queremos usar serviços de pesquisa JNDI quando. Tendo em conta o elevado preço consulta JNDI para um serviço, o serviço localizador padrão de plena utilização da tecnologia de cache. No primeiro pedido de um serviço, o serviço no localizador de serviço de pesquisa JNDI, e armazena em cache o objeto de serviço. Ao solicitar o mesmo serviço novamente, o localizador de serviços olha em seu cache, o que pode melhorar o desempenho da aplicação em grande medida. O que se segue é uma entidade deste padrão de projeto.
- Serviço (Service) - serviços realmente processar o pedido.As referências a estes serviços podem ser encontrados no servidor JNDI.
- Contexto / contexto inicial - Contexto JNDI com um serviço que você deseja encontrar uma referência.
- O localizador de serviço (Service Locator) - localizador de serviço é através de serviços de pesquisa e cache de JNDI para obter um único ponto de serviço de contato.
- Cache (Cache) - uma referência para os serviços de armazenamento de cache, a fim de reutilizá-los.
- Cliente (Cliente) - objeto de chamada do clientedo serviço através ServiceLocator.
realização
Vamos criarServiceLocator,InitialContext, Cache, Serviço como uma entidade representa vários objetos.Service1eService2representam serviços entidade.
ServiceLocatorPatternDemo,a nossa classe de demonstração aqui como um cliente, será usado para demonstrar serviçoServiceLocatorpadrão de design localizador.
passo 1
Criar um serviço de interface de serviço.
Service.java
Serviço interface pública { Cadeia getName pública (); public void execute (); }
passo 2
Criar uma entidade de serviço.
Service1.java
public class Service1 implementa Serviço { public void execute () { System.out.println ( "Execução Service1"); } @Override Cadeia getName pública () { retornar "Service1"; } }
Service2.java
classe pública Service2 implementa Serviço { public void execute () { System.out.println ( "Execução Service2"); } @Override Cadeia getName pública () { retornar "Service2"; } }
passo 3
Crie uma consulta para o JNDI InitialContext.
InitialContext.java
classe pública InitialContext { lookup public Object (String jndiName) { if (jndiName.equalsIgnoreCase ( "Service1")) { System.out.println ( "Olhando para cima e criando um novo objeto Service1"); return new Service1 (); } Else if (jndiName.equalsIgnoreCase ( "Service2")) { System.out.println ( "Olhando para cima e criando um novo objeto Service2"); retornar nova Service2 (); } return null; } }
passo 4
Criar Cache Cache.
Cache.java
importação java.util.ArrayList; import java.util.List; Cache classe pública { Lista <serviço> serviços privados; Cache pública () { serviços = new ArrayList <Service> (); } Serviço getService pública (String serviceName) { for (Serviço: Serviços) { Se (service.getName (). equalsIgnoreCase (serviceName)) { System.out.println ( "Retornando em cache" + serviceName + "objeto"); serviço de retorno; } } return null; } addService public void (Service NewService) { boolean existe = false; for (Serviço: Serviços) { Se (service.getName (). equalsIgnoreCase (newService.getName ())) { existe = true; } } if (! existe) { services.add (NewService); } } }
passo 5
Criar um localizador de serviço.
ServiceLocator.java
ServiceLocator classe pública { Cache Cache estática privado; estática { cache = new Cache (); } Serviço público estático getService (String jndiName) { Serviço = cache.getService (jndiName); if (serviço! = null) { serviço de retorno; } InitialContext context = new InitialContext (); service1 Service = (Service) context.lookup (jndiName); cache.addService (service1); voltar service1; } }
passo 6
UseServiceLocatorpara demonstrar o padrão de design localizador de serviço.
ServiceLocatorPatternDemo.java
ServiceLocatorPatternDemo classe pública { main (String [] args) public static void { Serviço = ServiceLocator.getService ( "Service1"); service.execute (); service = ServiceLocator.getService ( "Service2"); service.execute (); service = ServiceLocator.getService ( "Service1"); service.execute (); service = ServiceLocator.getService ( "Service2"); service.execute (); } }
etapa 7
Verifique saída.
Olhando para cima e criando um novo objeto Service1 executando Service1 Olhando para cima e criando um novo objeto Service2 executando Service2 Retornando em cache objeto Service1 executando Service1 Retornando em cache objeto Service2 executando Service2