设计模式学习笔记--服务定位器模式
2016-12-12 20:12
435 查看
三十二、服务定位器模式
服务定位器模式(Service Locator Pattern),主要用在JDNI中,充分利用缓存来快速定位使用服务service,来提高效率。实现
创建service接口,以及接口的实现类,也就是具体的service,然后创建服务定位器,和缓存对象类。在创建一个初始化条件类。Service接口
IService.java
package patterns.service; /** * Created by lenovo on 2016/12/12 0012. * 服务接口 */ public interface IService { public String getName(); public void execute(); }
接口实现类
Service1.java
package patterns.service; /** * Created by lenovo on 2016/12/12 0012. * Service 接口实现类 */ public class Service1 implements IService { @Override public String getName() { return "Service1"; } @Override public void execute() { System.out.println("执行服务,1#服务"); } }
Service2.java
package patterns.service; /** * Created by lenovo on 2016/12/12 0012. * Service 接口实现类 */ public class Service2 implements IService { @Override public String getName() { return "Service2"; } @Override public void execute() { System.out.println("执行服务,2#服务"); } }
目标程序类
Target.java
package patterns.intercepting; /** * Created by lenovo on 2016/12/12 0012. * 目标程序类 */ public class Target { public void execute(String request){ System.out.println("执行处理请求 "+request); } }
缓存类
Cache.java
package patterns.service; import java.util.ArrayList; import java.util.List; /** * Created by lenovo on 2016/12/12 0012. * 缓存类 */ public class Cache { private List<IService> services; public Cache() { services = new ArrayList<>(); } public List<IService> getServices() { return services; } public void addServices(IService service) { boolean exists = false; for (IService s : services) { if (s.getName().equalsIgnoreCase(service.getName())) { exists = true; } } if (!exists) { services.add(service); } } public IService getService(String serviceName) { for (IService s : services) { if (s.getName().equalsIgnoreCase(serviceName)) { return s; } } return null; } }
初始化类
InitialContext.java
package patterns.service; /** * Created by lenovo on 2016/12/12 0012. * 针对JNDI而创建的初始化类 */ public class InitialContext { public Object lookup(String jndiName) { if (jndiName.equalsIgnoreCase("Service1")) { System.out.println("Looking up and creating a new Service1 object"); return new Service1(); } else if (jndiName.equalsIgnoreCase("Service2")) { System.out.println("Looking up and creating a new Service1 object"); return new Service2(); } return null; } }
定位器端
ServiceLocator.java
package patterns.service; /** * Created by lenovo on 2016/12/12 0012. * 服务定位器 */ public class ServiceLocator { private static Cache cache; static { cache = new Cache(); } public static IService getService(String jndiName) { IService service = cache.getService(jndiName); if (service != null) { return service; } InitialContext context = new InitialContext(); IService service1 = (IService) context.lookup(jndiName); cache.addServices(service1); return service1; } }
演示
InterceptingFilterPatternDemo.java
package patterns.service; /** * Created by lenovo on 2016/12/12 0012. * 演示 */ public class ServiceLocatorPatternDemo { public static void main(String[] args){ //service都是新建 IService service = ServiceLocator.getService("service1"); service.execute(); service = ServiceLocator.getService("service2"); service.execute(); //service开始使用缓存 service = ServiceLocator.getService("service1"); service.execute(); service = ServiceLocator.getService("service2"); service.execute(); } }
输出
Looking up and creating a new Service1 object 执行服务,1#服务 Looking up and creating a new Service1 object 执行服务,2#服务 执行服务,1#服务 执行服务,2#服务
相关文章推荐
- 设计模式学习笔记
- 设计模式学习笔记(一)
- [设计模式学习笔记之一]面向对象是什么?
- 设计模式学习笔记(一)
- 面向对象的设计模式的学习笔记,不断学习归纳总结ing
- 设计模式学习笔记(一)——面向对象设计模式与原则
- 设计模式的学习笔记!(一)
- [设计模式学习笔记之一]面向对象是什么?
- 设计模式学习笔记(一)
- 设计模式学习笔记(三)
- 设计模式学习笔记4:对接口进行包装的Adapter
- 设计模式学习笔记2:说说Mediator模式
- 设计模式学习笔记(1)
- 设计模式学习笔记(2)
- 设计模式学习笔记1:对设计模式学习的一点想法兼谈Facade模式
- 设计模式学习笔记3:用于系统解藕的Observer
- C#设计模式学习笔记---简单工厂模式
- [设计模式学习笔记之二]设计模式和量体剪衣
- PetShop3.x学习笔记8-《PetShop 3.x的设计模式与体系结构》节选-数据库可移植性
- 设计模式学习笔记(5)