Java笔记之对象代理实例
----------------疯狂软件Java培训、iOS培训分享-----------------
简介即ProxyPattern,23种java常用设计模式之一。代理模式的定义:对其他对象提供一种代理以控制对这个对象的访问,下面我们一起来看看Java对象代理的一些笔记吧。
代码如下 复制代码
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//代理需要实现的接口
interface IVehical {
//例如我这里写了两个接口
void run();
void say();
}
//concrete implementation
class Car implements IVehical{
//下面这两个方法,作为接口的实现方法,如果接口中没有这些方法,而在这里出现了多余的方法程序将编译不过。
//每次调用这两个方法都会触发代理对象中的invoke方法。
public void run() {
System.out.println("Car is running");
}
public void say()
{
System.out.println("just one!");
}
}
//proxy class
//这个类是用来创建代理对象的,这里只是对它进行了简单的封装
class VehicalProxy {
private IVehical vehical;
public VehicalProxy(IVehical vehical) {
this.vehical = vehical;
}
//这个方法返回创建后的对象代理
public IVehical create(){
final Class[] interfaces = new Class[]{IVehical.class};
final VehicalInvacationHandler handler = new VehicalInvacationHandler(vehical);
return (IVehical) Proxy.newProxyInstance(IVehical.class.getClassLoader(),
interfaces, (InvocationHandler) handler);
}
//这个是跟代理对象绑定的一个处理器,每次调用对象代理中的方法都会触发这个处理器中的invoke方法
class VehicalInvacationHandler implements InvocationHandler{
private final IVehical vehical;
public VehicalInvacationHandler(IVehical vehical) {
this.vehical = vehical;
}
//每当执行对象代理的say或者call(只要是IVehical接口中的方法)就会触发invoke被执行
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("--before running...");
Object ret = method.invoke(vehical, args);
System.out.println("--after running...");
return ret;
}
}
}
class Main {
public static void main(String[] args) {
IVehical car = new Car();
VehicalProxy proxy = new VehicalProxy(car);
IVehical proxyObj = proxy.create();
proxyObj.say();
}
}
/*
* 程序运行之后将打印如下信息,因此我们可以看出对象的代理可以往特定对象的方法中添加附带的执行代码,
* 这个的作用在我们需要对一个做日志或者bug调试的时候非常有作用,因为我们不应该把调试代码或者是打
* 印日志代码写在对象中,这样我们就可以将日志的代码添加到对象的代理中,从而将业务与程序的框架相
* 关的功能分离,从而保证了代码的“纯净性”。
* output:
* --before running...
* Car is running
* --after running...
* */
疯狂软件学院依托强大的师资力量和就业优势,课程实战强,培养的学员素质高技术过硬。疯狂软件学院成为了国内知名的Java培训平台,向社会输送大量的IT人才,赢得了学员和企业的良好口碑。Java培训,专业Java培训机构,高中以上学历均可参加,疯狂软件学院学员毕业后入职名企,部分学员月薪在7000元以上,平均薪资在5300元至5600元月薪左右,下一位会是你吗?赶快来疯狂软件学院吧!
疯狂软件Java培训、iOS培训新年钜惠,报名Java就业班免费赠送Java基础班,报名iOS就业班免费赠送iOS基础班,本月火速抢座中,为回报广大新老学员,值此新年之际推出报读就业班赠送基础班的活动。
-----------------------------------2014年初活动--------------------------------------
疯狂软件Java学习班方向:
1.报读JavaEE就业班赠送基础班课程。
2.开班一次性(一个月内)交清JavaEE就业班学费,赠送基础班全套课程。
疯狂软件iOS学习班方向:
1.报读iOS应用+手游就业班赠送iOS基础班课程。
2.开班一次性(一个月内)交清iOS应用+手游就业班就业班学费,赠送基础班全套课程。
转载于:https://www.cnblogs.com/gojava/p/3547827.html
Java笔记之对象代理实例相关推荐
- java 笔记(3) —— 动态代理,静态代理,cglib代理
0.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口. 代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存 ...
- Java笔记-Semaphore简单应用实例
这个Semaphore和QSemaphore使用和原理一模一样. 这里简单写了个例子,开了10个线程去拿邻界资源,资源只有一个,拿到后要进行5s的业务错了,使用Semaphore,如果此资源被占用,那 ...
- Java笔记-SSLSocket双向认证实例
证书还是采用keytool生成的,这里都把信任库和私钥证书啥的,都放到了一个文件. 程序运行如下: 服务端: 客户端: 程序结构如下: 源码如下: SslContextProvider.java pu ...
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )
文章目录 前言 一.创建 事件监听器 对应的 动态代理 二.动态代理 数据准备 三.动态代理 调用处理程序 四.动态代理 实例对象创建 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...
- 10.8-全栈Java笔记:序列化/反序列化的步骤和实例
本节我们详细讲解10.3节中提到的序列化和反序列化操作. 序列化和反序列化是什么 当两个进程远程通信时,彼此可以发送各种类型的数据. 无论是何种类型的数据,都会以二进制序列的形式在网络上传送.比如,我 ...
- java学习之路 之 反射机制综合练习题、动态代理实例
在上一篇博文中我们已经进行了反射机制的习题练习,这里我们在做一个考察比较全面的练习,如下: 写一个类ReflectUtil类, 类中写一个静态方法Object methodInvoker(String ...
- 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)
用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0) 编辑 收藏 网 ...
- java类和对象实例对象_Java类、对象和实例的理解
最近在看Python,这门面向对象的语言又引起了类的引用.对象和实例这些概念之间的纠结,我按照自己的理解总结了一下Java里三者的关系,如果有不对的地方还希望大家指出. 类的引用和对象的概念没什么好弄 ...
- JVM运行时结构、Java内存管理、JVM实例、HotSpot VM对象的创建、内存布局和访问定位
1.JVM运行时结构 Java 运行时数据区域有程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区.其中前三个线程私有,随线程生而生,线程灭而灭:后面两个是线程间共享. 1.1 程序计数器 ...
最新文章
- Webserver管理系列:11、注意默认的隐含共享
- IO流介绍、java常用的几个IO流类之间的区别,以及各自的用法、使用场景
- jQuery的var that=this
- python设计小游戏谁先走到17_蜗牛绕墙爬(python小游戏源码)
- 可以记录阅读进度的 pdf 电脑阅读器
- atitit.编程语言 程序语言 的 工具性 和 材料性 双重性 and 语言无关性 本质
- 白盒测试用例设计方法
- ele饿了么表单验证的校验提示突破v-if的限制
- [网络安全自学篇] 七十九.Windows PE病毒原理、分类及感染方式详解
- 用户特殊权限SUID,SGID, SBIT理解学习
- matlab计算六面体的体积,六面体单元体积坐标方法-工程力学-清华大学.PDF
- 金针探底技术分析(下)
- python入门指南
- 有道云笔记Markdown编辑器 基础操作使用说明
- 计算机组成原理(7)指令系统——偏移寻址、堆栈寻址、CISC和RISC
- MySQL 据库管理系统
- 【营销】史上最全4P、4C、4S、4R、4V、4I营销理论
- java-php-python-springboot校园二手物品交易系统计算机毕业设计
- CGI简介用C来写CGI程序简要指南
- 攻克苹果4.3被拒问题 韩俊强的博客
热门文章
- CUDA C编程权威指南 第七章 调整指令级原语
- TensorFlow tf.expand_dims
- Pandas 排序之后索引问题
- python使用redis有序集合_Redis 有序集合(sorted set)
- 互联网薪资最新出炉,收藏了
- 《Docker进阶与实战》——3.3节Docker image的组织结构
- Spring Cloud与微服务学习总结(11)——spring cloud-openFeign 声明式远程调用总结
- 高并发分布式系统中生成全局唯一Id汇总
- Spring Cloud与微服务学习总结(5)——认证鉴权与API权限控制在微服务架构中的设计与实现(三)
- Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源