Java代理模式
来源:互联网 发布:淘宝创意店铺推荐 知乎 编辑:程序博客网 时间:2024/06/06 08:39
一静态代理:
当无法访问一个对象或者访问一个对象有困难的时候可以为这个对象提供一个代理,代理者与被代理者应该实现相同的接口,或者继承同一个抽象类。
被代理者:
public class Student implements Study{@Overridepublic void read() {System.out.print("read a book");}@Overridepublic void write() {System.out.print("write a book");}}代理者:
public class Teacher implements Study{private Student student;public Teacher(Student student){this.student=student;}@Overridepublic void read() {student.read();}@Overridepublic void write() {student.write();}}
需要实现相同的接口或者继承相同的抽象类:
public interface Study {void read();void write();}
main 方法实现:
public class School {public static void main(String[] args) {Student student=new Student();Teacher teacher=new Teacher(student);teacher.read();teacher.write();}}
我们可以理解为一个学生他不想学习,把读书的工作还有写书的工作都交给老师,让老师来做。 虽然在Java代码中我们可以通过静态代理模式实现,但是在现实中....嘿嘿嘿
二动态代理:
我们发现每个代理都需要一个代理类,这样的话类越多代码量越大,重复的行为也很多,这时候就用到了动态代理模式。
在Java代码中提供了一个InvocationHandler接口,需要实现invoke方法。
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class DynamicProxy implements InvocationHandler{private Object object;public Object bind(Object object) { this.object = object; return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this); } @Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = null;result=method.invoke(object, args);return result;}}在main方法中调用:
public class School {public static void main(String[] args) {Student student=new Student();DynamicProxy proxy=new DynamicProxy();Study study=(Study)proxy.bind(student);study.read();study.write();}}Java通过反射机制得到一个动态代理,这个时候就不需要静态代理的Teacher类,这个时候通过动态代理的反射机制形成一个Study接口类。
0 0
- Java代理之代理模式
- java代理模式---静态代理
- java代理模式--动态代理
- 代理模式&java动态代理
- JAVA代理模式--静态代理
- JAVA代理模式--动态代理
- JAVA动态代理 代理模式
- Java代理模式-静态代理
- java代理模式-动态代理
- Java代理模式 静态代理 动态代理
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- JAVA代理模式与动态代理模式
- Java代理模式和kotlin代理模式
- Java中的代理模式
- dos 命令大全
- 【SSH隧道】端口转发,socket代理
- YTKNetwork网络请求库介绍
- J2SE(十)Java之修饰符
- 字符串循环右移
- Java代理模式
- WEB SERVICE 概念 AND 原理
- 关于Xcode工程文件后的字母标注的含义
- Xcode7.3不自动提示类名 解决方案
- Jquery购物车抛物线效果
- spring AOP动态代理使用和配置方式(手打)
- 从头认识多线程-1.5 interrupt()和isInterrupt()
- html5的section标签
- 李沐等:MXNet设计和实现简介