静态代理模式

代理模式分为两种:静态代理和动态代理。

静态代理:代理类是由我们手动添加class类来实现,而动态代理类是由程序来生成代理类,代理无论是在生活中还是在程序中都有大量使用,如经纪人代理明星签合同,安排演出,回收尾款等操作都是通过代理完成,而具体唱歌则是有明星来完成。静态代理类和被代理类需要实现同一接口,而且由于代理类有些方法最终还是得调用被代理类来完成,所以静态代理类中还得持有被代理类的引用 

public interface Star {
	//签合同
	void signContract();
	//唱歌
	void sing();
	//收尾款
	void collectMoney();
}
//======================================
public class ProxyStar implements Star {
	private Star star;
	
	public ProxyStar(Star star) {//通过注入持有被代理对象的引用
		super();
		this.star = star;
	}

	@Override
	public void signContract() {
		System.out.println("ProxyStar 签合同"); //这些方法都可以由代理对象,经纪人来完成
	}

	@Override
	public void sing() {
		star.sing();//调用被代理对象 唱歌 方法 ,因为唱歌这个方法必须由明星本人完成 代理对象无法代劳
	}

	@Override
	public void collectMoney() {
		System.out.println("ProxyStar 收尾款");
	}

}
//=============================================
public class RealStar implements Star {

	@Override
	public void signContract() {
		System.out.println("RealStar 签合同");
	}

	@Override
	public void sing() {
		System.out.println("RealStar 唱歌");
	}

	@Override
	public void collectMoney() {
		System.out.println("RealStar 收尾款");
	}
}
//=========================================
	@Test
	public void func()
	{
		Star realStar=new RealStar();
		Star proxyStar=new ProxyStar(realStar); //注入被代理对象
		proxyStar.signContract();//这些事情由经纪人完成
		proxyStar.sing();//这些事情由明星本人完成
		proxyStar.collectMoney();//这些事情由经纪人完成
	}

  

原文地址:https://www.cnblogs.com/javabg/p/7620115.html