核心:使用代理类对目标类进行增强,代理类在程序运行前就已经定义好.java 源文件,其与目标类的关系在 程序运行前就已经确立。在程序运行前代理类已经编译为.class 文件。
缺点:1,代理类和目标类实现了相同的接口,每个代理都需要实现目标类的方法,这样就出现了大量的代 码重复。如果接口增加一个方法,除了所有目标类需要实现这个方法外,所有代理类也需要实现 此方法。增加了代码维护的复杂度。
2,代理类只服务于一种类型的目标类,如果要服务多个类型。势必要为每一种目标类都进行代理, 静态代理在程序规模稍大时就无法胜任了,代理类数量过多。
public class Test{
public static void main(String[] args) {
TaoBao taoBao = new TaoBao();
System.out.println(taoBao.usbSell(10));
}
}
//usb接口
interface Usb{
float usbSell(int mount);
}
//usb生产常见
class UsbKingFactory implements Usb{
@Override
public float usbSell(int mount) {
return mount*100.0F;
}
}
//代理商
class TaoBao implements Usb{
Usb usb = new UsbKingFactory();
@Override
public float usbSell(int mount) {
//加价
return usb.usbSell(mount) + 10.0F;
}
}