静态代理
代理是英文 Proxy 翻译过来的。在生活中见到过的代理,如在淘宝上买U盘,淘宝商家从生产U盘的厂家拿到U盘,再通过淘宝卖给用户。

静态代理代码实现
首先得有一个接口,通用的接口是代理模式实现的基础。这个接口我们命名为 UsbSell,代表U盘。
package com.proxytest.service;
//目标接口
public interface UsbSell {
    float sell(int amount);
}
然后,我们要有一个真正的实现这个UsbSell接口的类,这个类即为生产U盘的工厂,和一个只是实现接口的代理类。
package com.proxytest.factory;
import com.proxytest.service.UsbSell;
//目标类  厂家
public class UsbKingFactory implements UsbSell {
    @Override
    public float sell(int amount) {
        System.out.println("目标类中的方法调用,UsbKingFactory中的sell");
        return 85.0f;
    }
}
这个表示真正的商家。它实现了UsbSell接口,sell() 方法调用时,就实现了销售u盘功能
package com.proxytest.shangjia;
import com.proxytest.factory.UsbKingFactory;
import com.proxytest.service.UsbSell;
public class TaoBao implements UsbSell {
    //声明商家代理的厂家具体是谁
    private UsbKingFactory factory = new UsbKingFactory();
    @Override
    //实现销售u盘功能
    public float sell(int amount) {
        //向厂家发送订单,告诉厂家,买了U盘,厂家发货
        float price = factory.sell(amount);
        //商家需要加价,也就是代理要增加价格
        price = price + 25;//增强功能,代理类在完成目标类方法调用后,增强了功能
        //在目标类的方法调用后,你做的其它功能,都是增强的意思
        System.out.println("商家给你返一个优惠券,或者红包");
        //增加的价格
        return price;
    }
}
编写测试代码,模拟用户下单买U盘
package com.atguigu.proxytest;
import com.atguigu.proxytest.shangjia.TaoBao;
public class ShopMain {
    public static void main(String[] args) {
        //创建代理的商家taobao对象
        TaoBao taoBao = new TaoBao();
        float price = taoBao.sell(1);
        System.out.println("通过淘宝的商家,购买U盘单价:" + price);
    }
}
观察结果:
目标类中的方法调用,UsbKingFactory中的sell 商家给你返一个优惠券,或者红包 通过淘宝的商家,购买U盘单价:110.0
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号