本文共 1651 字,大约阅读时间需要 5 分钟。
基本概念定义:给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用;
通俗的讲代理模式就是生活中常见的中介;
想象一下我们生活中的购买火车票的情节,可以从官网上购买,可以到售票的窗口购买,这是从官方购买,在编程中,这个过程就是指从提供这个功能的类直接获取这个功能;当然我们也可以从售票厅旁边的小超市,或者其他地方代售火车票的地方购买火车票,那么这些代销处就是代理了火车站的售票功能,那么他们就是代理;
静态代理创建服务类接口
public interface BuyHouse { void buyHosue();}
实现服务接口
public class BuyHouseImpl implements BuyHouse { @Override public void buyHosue() { System.out.println("我要买房"); }}
创建代理类
public class BuyHouseProxy implements BuyHouse { private BuyHouse buyHouse; public BuyHouseProxy(final BuyHouse buyHouse) { this.buyHouse = buyHouse; } @Override public void buyHosue() { System.out.println("买房前准备"); buyHouse.buyHosue(); System.out.println("买房后装修"); }}
编写测试类
public class ProxyTest { public static void main(String[] args) { BuyHouse buyHouse = new BuyHouseImpl(); buyHouse.buyHosue(); BuyHouseProxy buyHouseProxy = new BuyHouseProxy(buyHouse); buyHouseProxy.buyHosue(); }}
动态代理动态代理是在程序运行时通过反射机制动态创建的;
编写动态处理器
public class DynamicProxyHandler implements InvocationHandler { private Object object; public DynamicProxyHandler(final Object object) { this.object = object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("买房前准备"); Object result = method.invoke(object, args); System.out.println("买房后装修"); return result; }}
编写测试类
public class DynamicProxyTest { public static void main(String[] args) { BuyHouse buyHouse = new BuyHouseImpl(); BuyHouse proxyBuyHouse = (BuyHouse) Proxy.newProxyInstance(BuyHouse.class.getClassLoader(), new Class[]{BuyHouse.class}, new DynamicProxyHandler(buyHouse)); proxyBuyHouse.buyHosue(); }}
更多关于java动态代理的可以参考:
Java动态代理InvocationHandler和Proxy学习笔记
转载地址:http://isgtz.baihongyu.com/