静态代理和动态代理

代理:

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

 

真实示例:

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

 

作用:

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

  

 

posted on 2021-03-15 16:37  暮雨轻风  阅读(58)  评论(0编辑  收藏  举报