• 静态代理和动态代理


    代理:

    当一个类无法直接访问目标类时,就需要代理类来访问,客户类再访问代理类来实现功能

    真实示例:

    房东有一个房子,出租。租客无法直接访问到房东,需要通过中介联系租房,并收取费用

    作用:

      1.控制访问

      2.功能增强

    静态代理:

    代理类是手动实现的java文件,同时代理的目标类是规定的;

      优点:容易理解,使用方便

      缺点:在目标类较多时,会产生大量的代理类,当接口改变时,影响范围较大,改动较多

    动态代理:

    使用反射机制,在程序执行中,创建代理类对象,

      特点:不用创建类文件,代理的目标类是活动的,可设置的

      实现方式:

      1.jdk动态代理(理解),使用java反射包中的类和接口实现动态代理的功能

        反射包:java.lang.reflect

        类:invocationHandler,Method,Proxy

      2.cglib动态代理(了解)

    静态代理栗子:

    public interface Sell {
        float sell(Integer amount);
    }
    

      

    工厂

    package com.demo.factory;
    
    import com.demo.service.Sell;
    
    public class GoldKingFactory  implements Sell{
    
        @Override
        public float sell(Integer amount) {
            return 85.0f;
        }
    }
    

      

    商家:

    package com.demo.shangjia;
    
    import com.demo.factory.GoldKingFactory;
    import com.demo.service.Sell;
    
    public class TaoBao implements Sell {
        private GoldKingFactory kingFactory = new GoldKingFactory();
        @Override
        public float sell(Integer amount) {
            float price = kingFactory.sell(1);
            price +=20;
            System.out.println("翻了优惠券");
            return price;
        }
    }
    

      

    顾客:

    package com.demo.customer;
    
    import com.demo.shangjia.TaoBao;
    
    public class man {
        public static void main(String[] args) {
            TaoBao taoBao = new TaoBao();
            float price = taoBao.sell(1);
            System.out.println(price);
        }
    }
    

      

  • 相关阅读:
    洛谷 P5595 【XR-4】歌唱比赛
    洛谷 P5594 【XR-4】模拟赛
    洛谷 AT1350 深さ優先探索
    洛谷 P1449 后缀表达式
    VIJOS-P1064 迎春舞会之数字舞蹈
    洛谷 P3998 [SHOI2013]发微博
    CF306C White, Black and White Again
    CF261E Maxim and Calculator
    JLOI 2014 松鼠的新家
    HNOI 2009 有趣的数列
  • 原文地址:https://www.cnblogs.com/ethnic/p/14538438.html
Copyright © 2020-2023  润新知