设计模式--代理模式(一)静态代理模式
什么是代理模式?
一个类对另一个类的访问进行访问控制。方法调用方对代理类对象访问来获取实际的方法服务。
什么是静态代理模式?
针对某个类的某个方法,创建对应的代理类进行访问控制。
哪些对象实例需要访问控制?
- 需要远程访问的对象
- 创建开销很大的对象
- 需要提供安全控制的对象
静态代理模式依赖及访问控制流程图是什么样子的?
类间依赖:
数据访问流程图:
具体实现:
服务接口:
package Proxy; public interface Service { void invokeMethod(String param); }
服务实现类:
package Proxy; public class ServiceImpl implements Service { @Override public void invokeMethod(String param) { System.out.println("param: " + param); } }
代理类(拥有服务实现类的实例,对实例的方法访问进行访问控制):
package Proxy; public class StaticProxy implements Service { Service realService; public StaticProxy(Service service) { this.realService = service; } @Override public void invokeMethod(String param) { beforeInvoke(); realService.invokeMethod(param); afterInvoke(); } private void beforeInvoke() { System.out.println("opening source..."); } private void afterInvoke() { System.out.println("closing source..."); } }
调用方:
public static void main(String[] args) { Service realService = new ServiceImpl(); Service proxy = new StaticProxy(realService); //方法请求 proxy.invokeMethod("Integer(10)"); }
缺点:
对于代理同一个类,只要新增了一种新的代理方法,就需要创建一个新类去作为代理类。
对于使用相同代理机制去代理不同的类,每新增一个新的服务类,也需要创建一个新的类去作为代理类。
导致代理类数量急剧上升。