静态代理

代理是英文 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

  

 

 
posted @ 2021-01-13 20:20  莫困顿  阅读(115)  评论(0)    收藏  举报