博客
关于我
java设计模式--代理模式
阅读量:588 次
发布时间:2019-03-12

本文共 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/

你可能感兴趣的文章
Thymeleaf sec:authorize 标签不生效
查看>>
Iterable与Iterator
查看>>
关于WebView当前地址问题的疑惑
查看>>
Python机器学习(九十二)Pandas 统计
查看>>
SecSolar:为代码“捉虫”,让你能更专心写代码
查看>>
Trying to construct an instance of an invalid type
查看>>
1965 - 2019 年最流行的编程语言变化
查看>>
链上钱包的博彩雷区
查看>>
GRUB2
查看>>
解决RHEL6 vncserver 启动 could not open default font 'fixed'错误.
查看>>
微信JS-SDK DEMO页面和示例代码
查看>>
GridView的另外一种分页方式,可提高加载速度
查看>>
GridView自定义删除操作
查看>>
一张图搞定RPC框架核心原理
查看>>
Scala中的包
查看>>
他来了他来了,他带着云栖大会的免费门票走来了
查看>>
获取linux 主机cpu类型
查看>>
限流的算法有哪些?
查看>>
Android Studio updating indices 一直刷新和闪烁
查看>>
个人购买服务器问题?
查看>>