代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。简单的说就是,我们在访问实际对象时,是通过代理对象来访问的,代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。
实现步骤
1.书写接口
2.书写实现类(委托类)
3.书写代理类实现invocationHandler接口
直接上代码
接口:
/**
* 版本信息: Copyright (c)2018
* 公司信息: 浙江xx信息技术有限公司
* 开发人员: xiaohuang email:331088675@qq.com
* 创建日期: 2019/2/14 16:29
* 修改历史:
* 功能描述:
* ———————————————————————————
*/
public interface Person {
public void say();
public void eat();
public void makeMoney();
public void work();
}
实现类
/**
* 版本信息: Copyright (c)2018
* 公司信息: 浙江xx信息技术有限公司
* 开发人员: xiaohuang email:331088675@qq.com
* 创建日期: 2019/2/14 16:30
* 修改历史:
* 功能描述:
* ———————————————————————————
*/
public class Student implements Person {
@Override
public void say() {
}
@Override
public void eat() {
}
@Override
public void makeMoney() {
}
@Override
public void work() {
System.out.println("study================");
}
}
代理类
/**
* 版本信息: Copyright (c)2018
* 公司信息: 浙江xx信息技术有限公司
* 开发人员: xiaohuang email:331088675@qq.com
* 创建日期: 2019/2/14 16:32
* 修改历史:
* 功能描述:
* ———————————————————————————
*/
public class ProxyPerson implements InvocationHandler {
Student student;
public ProxyPerson(Student stu){
this.student=stu;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法执行前==============");
method.invoke(student);
System.out.println("方法执行后=====================");
return null;
}
}
测试
/**
* 版本信息: Copyright (c)2018
* 公司信息: 浙江xx信息技术有限公司
* 开发人员: xiaohuang email:331088675@qq.com
* 创建日期: 2019/2/14 16:37
* 修改历史:
* 功能描述:
* ———————————————————————————
*/
public class ProxyTest {
public static void main(String[] args) {
Class[] interface=Student.class.getInterfaces();
Object proxy = Proxy.newProxyInstance(Person.class.getClassLoader(), interface, new ProxyPerson(new Student()) {
});
Person pers=(Person) proxy;
pers.work();
}
}
============================================
待续。。。
下篇将描述原理