zoukankan      html  css  js  c++  java
  • 静态代理和动态代理

    代理:

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

    真实示例:

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

    作用:

      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);
        }
    }
    

      

  • 相关阅读:
    ENVI【遥感图像预处理之图像的几何校正】
    ENVI数据显示操作【Tools菜单操作1】
    ENVI软件操作【数据显示操作——Overlay菜单操作】
    ENVI软件操作之【数据的显示操作】
    ADO.NET操作数据库(一)
    ASP.Net之数据绑定
    动态网页的建立
    VS2010安装异常中断后无法安装的解决方法(安装时发生严重错误)
    linux vi 删除多行的方法
    简单实现异步编程promise模式
  • 原文地址:https://www.cnblogs.com/ethnic/p/14538438.html
Copyright © 2011-2022 走看看