代理:
当一个类无法直接访问目标类时,就需要代理类来访问,客户类再访问代理类来实现功能
真实示例:
房东有一个房子,出租。租客无法直接访问到房东,需要通过中介联系租房,并收取费用
作用:
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);
}
}