java--设计模式之静态代理

代理接口:被代理类

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));
		
	}
}
发布了26 篇原创文章 · 获赞 9 · 访问量 289

猜你喜欢

转载自blog.csdn.net/weixin_45430616/article/details/102796099