代理模式例子

代理模式简单点就和现实中一样,只是代理实质性的还是别人在做。比如一个工厂招工,另外还有个人力资源部也在为该工厂招工,对外都是招工,表面不同,其实都是给这家工厂招人。

代理模式分为3部分:

1.代理抽象类(大多以一个接口出现,抽象表示代理提供的目标条件、用处)

2.代理类(提供代理目标给客户)

3.代理目标(实现代理抽象类的功能,被代理类使用)

 

举例如下:

情景:有家打字服务公司,当然干活的都是打字员,都能打字,打字员分两种:男和女打字员。由于公司觉得女同志打字比较辛苦,所以就让女同志只接活,最终交给男打字员操作,默认接来的活都交给Join,也可指定某个男打字员来操作,在客户看来是女打字员打字,其实是别人在干,她们只告诉别人我能给你们提供打字服务。这样女打字员就成了一个代理。

代码:

Typist

 

package j2se.proxy;

/**
 * 打字员
 * @author Lyon Yao
 *
 */
public interface Typist {
	/**
	 * 打字
	 */
	public void type();
}

 ManTypist

 

package j2se.proxy;

/**
 * 男打字员
 * @author Lyon Yao
 *
 */
public class ManTypist implements Typist {
	private String name;
	
	public ManTypist(String name) {
		this.name = name;
	}
	@Override
	public void type() {
		// TODO Auto-generated method stub
		System.out.println("I'm "+this.name+" and I'm typing");
	}

}

 WomanTypist

 

package j2se.proxy;

/**
 * 女打字员
 * @author Lyon Yao
 *
 */
public class WomanTypist implements Typist {

	private Typist typist=null;
	
	public WomanTypist(Typist typist) {
		super();
		this.typist = typist;
	}
	
	public WomanTypist() {
		super();
		this.typist=new ManTypist("Join");//default Join to do this work
		// TODO Auto-generated constructor stub
	}

	@Override
	public void type() {
		// TODO Auto-generated method stub
		typist.type();
	}

}

 测试

 

package j2se.proxy;

import org.junit.Test;

public class TestCase {

	@Test
	public void proxyTest(){
		WomanTypist typist=new WomanTypist();
		typist.type();
		Typist manTypist=new ManTypist("Tom");
		typist=new WomanTypist(manTypist);
		typist.type();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值