简单代理模式

/**
 * 
 */
package typeinfo;

/**
 * 简单代理模式的使用。
 * 代理模式提供了隐藏和扩展的能力,将被代理者可以隐藏起来,而且可以在代理类中对被代理的
 * 功能再进行加工包装,使其更丰满。
 * 
 */

/**
 * 定义出代理对象的接口
 * @author LYL
 *
 */
interface Interface{
	void doSomething();
	void somethingElse(String arg);
}

/**
 * 被代理的对象,是真正干活的
 * @author LYL
 *
 */
class RealObject implements Interface{

	@Override
	public void doSomething() {
		System.out.println("RealObject doSomething");
	}

	@Override
	public void somethingElse(String arg) {
		System.out.println("RealObject somethingElse"+arg);
	}
}

/**
 * 代理类,同样实现了Interface接口,但是只是一个代理,真正干活是另有其人。
 * 代理类只是起到一个中间角色,起到白手套的作用。
 * @author LYL
 *
 */
class SimpleProxy implements Interface
{
	private Interface proxied; //被代理者
	
	public SimpleProxy(Interface proxied){
		this.proxied=proxied;
	}
	@Override
	public void doSomething() {
		//除了代理以外,还可以附加一些其它的服务
		System.out.println("SimpleProxyDemo doSomething.");
		//将工作转给被代理的来做
		this.proxied.doSomething();
	}
	@Override
	public void somethingElse(String arg) {
		System.out.println("SimpleProxyDemo somethingElse "+arg);
		this.proxied.somethingElse(arg);
	}
}
/**
 * 简单代理类测试
 * @author LYL
 *
 */
public class SimpleProxyDemo{
	public static void consumer(Interface iface){
		iface.doSomething();
		iface.somethingElse(" invoke ");
	}
	
	public static void main(String args[]) throws Exception{
		//直接使用类
		System.out.println("直接使用类");
		consumer(new RealObject());
		//通过代理来使用被代理的类
		System.out.println("通过代理来使用被代理的类");
		consumer(new SimpleProxy(new RealObject()));
	}
}

 

posted on 2014-04-19 17:44  老连  阅读(227)  评论(0编辑  收藏  举报

导航