zoukankan      html  css  js  c++  java
  • [Java动态代理] 设计模式之代理模式

    静态代理就不说了 太简单了、没什么好说的、动态代理简易的代码演示

     1 import java.lang.reflect.InvocationHandler;
    2 import java.lang.reflect.Method;
    3 import java.lang.reflect.Proxy;
    4
    5 //调用的客户端
    6 public class Client {
    7 public static void main(String[] args) {
    8 RealSubject realSubject = new RealSubject(); // 真实角色
    9 InvocationHandler handler = new DynamicProxy(realSubject);// 动态代理
    10 Class<?> classType = handler.getClass();
    11
    12 // 动态创建了一个了class
    13 Subject subject = (Subject) Proxy.newProxyInstance(classType
    14 .getClassLoader(), realSubject.getClass().getInterfaces(),
    15 handler);
    16
    17 subject.request();
    18 }
    19 }
    20
    21 // 代理角色
    22 class DynamicProxy implements InvocationHandler {
    23
    24 private Object subject;
    25
    26 public DynamicProxy(Object subject) {
    27 this.subject = subject;
    28 }
    29
    30 @Override
    31 public Object invoke(Object proxy, Method method, Object[] args)
    32 throws Throwable {
    33 System.out.println("before calling: " + method);
    34
    35 // 使用反射机制调用方法
    36 method.invoke(this.subject, args);
    37
    38 System.out.println("after calling: " + method);
    39 return null;
    40 }
    41 }
    42
    43 // 抽象角色
    44 interface Subject {
    45 public void request();
    46 }
    47
    48 // 真实角色
    49 class RealSubject implements Subject {
    50 @Override
    51 public void request() {
    52 System.out.println("from real subject");
    53 }
    54 }



    My New Blog : http://blog.fdlife.info/ The more you know, the less you believe.
  • 相关阅读:
    区块链 超级节点什么鬼?
    堆排序--模版类
    梯度下降算法Python简单试验
    svn: Can't convert string from 'UTF-8' to native encoding
    常用加密算法比较
    快速排序结合插入排序
    无法解析的外部符号
    mysql 远程连接出错问题
    50个C/C++经典面试题
    设计算法找出字符串中重复出现最长的子串
  • 原文地址:https://www.cnblogs.com/ForDream/p/2329366.html
Copyright © 2011-2022 走看看