静态代理~怎么为一个已经实现得方法在前后加逻辑~剖析插头和插座

[code]
/**
代理模式语义:有一个类,然后想对这个类进行增强,把一些控制类放入这个类的某个方法的前后,因为是对方法的扩展,所以把方法变成接口实现插拔

"/
//从某种意义上说两种TimeProxy 都是Tank的代理,这两个都是代理的实现
//比如一个类Tank,想为这个move前后加些逻辑,方面一:继承,就重写他啊
class Tank{
public void move(){

}
}

class TimeProxy extends Tank{
public void move(){
long start = System.currentTimeMillis();//前逻辑
super.move();
long end = System.currentTimeMillis();//后逻辑
System.out.println(end-start);
}
}

//方法二:聚合
class TimeProxy {
Tank t;
public void move(){
long start = System.currentTimeMillis();//前逻辑
t.move();
long end = System.currentTimeMillis();//后逻辑
System.out.println(end-start);
}
}

/*区别是什么:用继承的话,类会随着需求的增加而无限的继承下去
下面看案例:
如果要再有一个log记录怎么办
当然第一种和第二种方法都要写LogProxy,如果我需要先记录日志后记录时间呢
在第一种方法下只能再写一个Log_Time_Proxy
但第二种方法就不用了,让他们都搞一个接口出来,想怎么插就怎么插
*/
class Tank implements Moveable{ //坦克有一个Moveable接口
public void move(){

}
}
class TimeProxy implements Moveable{ //坦克
//Tank t;
Moveable t ;
public TimeProxy (Moveable t){
this.t = t; //接口插槽设置
}

public void move(){
long start = System.currentTimeMillis();//前逻辑
t.move();
long end = System.currentTimeMillis();//后逻辑
System.out.println(end-start);
}
}

class LogProxy implements Moveable{ //坦克
//Tank t;
Moveable t ;
public LogProxy(Moveable t){
this.t = t; //接口插槽设置
}

public void move(){
Log记录//前逻辑
t.move();
}

class Logic{
public static void main(String[] args){
Tank t = new Tank();
TimeProxy time = new TimeProxy(t);
LogProxy log = new LogProxy(time);
log.move();
}
}
/*注意:这里的Moveable t 我把他叫做接口中实体元件架,就相当于插座中的铜片片,这个铜片片可以来接收一个插头一样
implements Moveable-----使得自己可以变成一个标准件实体,自己可以被插入到别人的插槽中,方便赋予别人。我把他叫获得Moveable 插头能力

Moveable t ;
public TimeProxy (Moveable t){
this.t = t; //接口插槽设置
}
这个则是使得自己有一个插孔,有一个铜片片可以接收别人的插入,我把他叫做Moveable插孔能力
*/

[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值