zoukankan      html  css  js  c++  java
  • Java中的方法增强

    A:在不影响业务情况下,增强一个方法有几种方法呢?

    B:3种!

    A:哪三种呀?

    一、继承类来重写方法;

      1、要可以获取这个类的构造;

    class Man{
    public void run(){
        System.out.println("跑....");
        }
    }
    
    class SuperMan extends Man{
    public void run(){
         super.run();
        System.out.println("飞....");
        }
    }

    二、装饰者模式

      1、包装类要和被包装类实现同一接口;

      2、包装类要获取被包装类的引用;

      

    public interface Tenant {
        void rent();
    }
    public class People implements Tenant {
        public void rent() {
            System.out.println("支付租金");
        }
    }
    public class PeopleProxy implements Tenant {//实现统一接口
        private People p;
    
        public PeopleProxy(People p){//获取被包装类的引用
            this.p = p;
        }
    
        public void rent() {
            System.out.println("我是中介我要先收中介费");
            p.rent();
        }
    }

    三、动态代理

      1、被增强的对象实现接口即可;

    public class ActiveProxy implements InvocationHandler {
        private Object o;
    
        public ActiveProxy(Object o){
            this.o = o;
        }
    
    
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object invoke = method.invoke(this.o, args);
            return invoke;
        }
    }
    public class Run {
        public static void main(String[] args) {
            //获得要增强实现类的对象
            Tenant p = new People();
            //类加载器
            ClassLoader c = p.getClass().getClassLoader();
            //产生的代理对象的引用
            ActiveProxy handler = new ActiveProxy(p);
    
            Tenant app = (Tenant) Proxy.newProxyInstance(c,new Class[]{Tenant.class},handler);
            app.rent();
        }
    }
  • 相关阅读:
    DBA操作常用命令
    DBA常用SQL
    安装下rlwrap
    destoon复制新模块的方法
    生成二维码
    布隆过滤
    Golang中的三个点
    Golang: 数组和切片
    Fabric的权限管理:Attribute-Based Access Control
    Node.js web发布到AWS ubuntu 之后,关闭Putty,Node 项目也随之关闭的解决办法
  • 原文地址:https://www.cnblogs.com/jiangbaoyabo/p/15176411.html
Copyright © 2011-2022 走看看