博客
关于我
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/

你可能感兴趣的文章
反射Field、Method、Constructor
查看>>
可变长度参数
查看>>
堆空间常用参数总结
查看>>
逃逸分析-堆分配对象
查看>>
常量池、运行时常量池
查看>>
3、条件查询
查看>>
5、分组函数 / 聚合函数
查看>>
8、子查询
查看>>
cordova打包apk更改图标
查看>>
开启与配置SMTP服务器
查看>>
APP卡片式设计
查看>>
GitHub上传时,项目在已有文档时直接push出现错误解决方案
查看>>
云数据库
查看>>
大数据在不同领域的应用
查看>>
页面置换算法
查看>>
推荐系统资料
查看>>
文件系统的层次结构
查看>>
减少磁盘延迟时间的方法
查看>>
vue(渐进式前端框架)
查看>>
权值初始化和与损失函数
查看>>