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

    我们需要掌握两个类的使用:

    • public interface InvocationHandler
      InvocationHandler是通过一个代理实例调用处理程序实现的接口。

      可以通过invoke方法实现对真实角色的代理访问.

      通过proxy生成代理类对象,都要指定对应的处理器对象.

      • invoke

        Object invoke(Object proxy,方法 method,Object[] args)throws Throwable
        在代理实例上处理方法调用,并返回结果。当在与它关联的代理实例上调用方法时,该方法将在调用处理程序上调用此方法。
        参数
        proxy -代理实例,调用的方法
        对接口方法的调用相应的 method代理实例的 方法实例。声明类的 方法对象将接口的方法声明,这可能是一个超接口代理接口,代理类继承的方法。
        args -包含在方法上通过代理实例调用的实参的值对象的数组,或 null如果接口方法不需要参数。原始类型的实参是包裹在适当的原始包装类的实例,如 java.lang.Integerjava.lang.Boolean
         
        代码:
        star
         1 package org.west.demo;
         2 
         3 public interface Star {
         4     //面谈
         5     void confer();
         6     //签合同
         7     void signContart();
         8     //订票
         9     void bookTacket();
        10     //唱歌
        11     void sign();
        12     //收尾款
        13     void collentMoney();
        14 }

        realstar

      •  1 package org.west.demo;
         2 
         3 public class RealStar implements Star{
         4     public void confer() {
         5 
         6     }
         7 
         8     public void signContart() {
         9 
        10     }
        11 
        12     public void bookTacket() {
        13 
        14     }
        15 
        16     public void sign() {
        17         System.out.println("周杰伦:唱歌");
        18     }
        19 
        20     public void collentMoney() {
        21 
        22     }
        23 }

        starhandler

      •  1 package org.west.demo;
         2 
         3 import java.lang.reflect.InvocationHandler;
         4 import java.lang.reflect.Method;
         5 
         6 public class StarHandler implements InvocationHandler {
         7 
         8       Star realStar;
         9 
        10     public StarHandler(Star realStar) {
        11         this.realStar = realStar;
        12     }
        13 
        14     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        15 
        16         System.out.println("处理事务前");
        17 
        18         method.invoke(realStar,args);
        19 
        20         System.out.println("处理事务后");
        21         return null;
        22 
        23 
        24 
        25     }
        26 }

        client

      • import java.lang.reflect.Proxy;
        
        public class Client {
        
            public static void main(String[] args) {
               Star realStar = new RealStar();
                StarHandler handler = new StarHandler(realStar);
        
                Star proxy = (Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Star.class}, handler);
        
                proxy.sign();
        
            }
        
        }

        总结:

      • 当我们调代理类的方法 就会进入invoke方法里面执行一次.我们可以在invoke方法中做一些事情的处理.
  • 相关阅读:
    网上购物商城管理系统-毕业设计
    中国购物管理系统-毕业设计
    网上购物管理系统-毕业设计
    网上商城管理系统-课程设计
    公益捐赠管理系统-毕业设计
    校园图书捐赠管理系统-毕业设计
    电子商务商城管理系统-毕业设计
    超市会员管理系统-毕业设计
    天猫商城管理系统-毕业设计
    高校校园设备管理系统-毕业设计
  • 原文地址:https://www.cnblogs.com/xiaoqiqistudy/p/11265588.html
Copyright © 2011-2022 走看看