代理接口:被代理类
public interface ICalFab {
int calFabByLoop(int n);
int calFabByRecursion(int n);
}
代理接口的实现类:被代理类
class CalFabImpl implements ICalFab{
@Override
public int calFabByLoop(int n) {
int n1 = 1;
int n2 = 1;
int n3 = 0;
for(int i = 3;i<=n;i++){
n3 = n1 + n2;
n1 = n2 ;
n2 = n3;
}
return n3;
}
@Override
public int calFabByRecursion(int n) {
if(n == 1 || n == 2) return 1;
return calFabByRecursion(n-1)+calFabByRecursion(n-2);
}
}
- 代理类: 代理类中往往依赖被代理类的被代理类
class CalFabImplProxy implements ICalFab{
private ICalFab icf;
public CalFabImplProxy(ICalFab icf){
this.icf = icf;
}
@Override
public int calFabByLoop(int n) {
long start = System.currentTimeMillis();
int result =icf.calFabByLoop(n);
long end =System.currentTimeMillis();
System.out.println((end-start)+"ms");
return result;
}
@Override
public int calFabByRecursion(int n) {
long start = System.currentTimeMillis();
int result =icf.calFabByRecursion(n);
long end =System.currentTimeMillis();
System.out.println((end-start)+"ms");
return result;
}
}
客户端测试类
public class Invoker {
public static void main(String[] args) {
//被代理类的调用 真正的业务实现类
//1.构造被代理对象(真正的业务实现类)
ICalFab icf = new CalFabImpl();
//2.构造代理对象
CalFabImplProxy proxy = new CalFabImplProxy(icf);
//3.调用代理对象的业务方法
System.out.println(proxy.calFabByLoop(45));
System.out.println(proxy.calFabByRecursion(45));
}
}