回顾Java中的代理模式

代理模式有三个角色

代理模式一般涉及到的角色有:

抽象角色:声明真实对象和代理对象的共同接口(这里卖电脑);

代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装(电脑代理商可以卖电脑,同时为了吸引顾客可能还要附送一些赠品,这里暂定为鼠标)。

真实角色:代理角色所代表的真实对象,是我们最终要引用的对象(代理商本身是没有电脑的,这里的真实角色是厂家ComputerMaker)。

这里是基于Java的代理模式,所以只能是接口代理,下面是抽象角色

public interface SaleComputer {
public abstract void saleComputer(String type);//卖电脑

}

接下来是真实角色

public class ComputerMaker implements SaleComputer {//厂家出售电脑

private Logger log = Logger.getLogger(this.getClass().getName());

public void saleComputer(String type) {
log.info("computermaker sale computers("+type+")....");

}


}

代理机制

public class FunctionProxy implements InvocationHandler {//代理后
private Object delegate;
private Logger logger = Logger.getLogger(this.getClass().getName());
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {

Object o = null;

o=method.invoke(delegate, args);
giveMouse();

return o;
}
public FunctionProxy(Object delegate){
this.delegate = delegate;
}

private void giveMouse(){
logger.info("赠送鼠标.....");
}


}

测试,创建代理商实例

public class TestProxy {


public static void main(String[] args) {

SaleComputer sc = new ComputerMaker();

InvocationHandler handler = new FunctionProxy(sc);

SaleComputer proxy = (SaleComputer) Proxy.newProxyInstance(sc.getClass().getClassLoader(),
sc.getClass().getInterfaces(), handler);//创建代理商实例

proxy.saleComputer("LENEVO");//代理商卖电脑

}

}
输出结果

信息: computermaker sale computers(LENEVO)....

信息: 赠送鼠标.....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值