/**
* @author magc
*代理角色和真实角色的共同抽象类
*/
publicabstractclass Role {
//作为代理角色和真实角色的共同接口,方便代理角色对外代替真实角色来提供服务
publicabstractvoid service(String user_id);
}
2
3/**
4 * @author magc
5 * 真实角色类
6 * 对外是不可访问
7 *
8*/
9publicclass RealRole extends Role {
10
11/* (non-Javadoc)
12 * @see com.magc.proxy.Role#service()
13 * 提供服务
14*/
15 @Override
16publicvoid service(String user_id) {
17 System.out.println("真实角色为你服务……");
18 }
19//验证用户身份
20publicboolean CheckUser(String user_id)
21 {
22returntrue;
23 }
24
25 }
/**
* @author magc
* 代理角色类
* 对客户端开发其接口
* 内部可以直接引用真实角色实例,将客户端的请求转给真实角色实例
* 对转发请求的前或者后面可以增加一些额外操作
*/
publicclass ProxyRole extends Role {
private RealRole realrole = null;
/* (non-Javadoc)
* @see com.magc.proxy.Role#service()
*/
@Override
publicvoid service(String user_id) {
System.out.println("代理角色为你服务……");
//需要时才去创建真实角色实例
realrole = new RealRole();
//增加额外操作:验证身份
System.out.println("验证身份……");
if(!realrole.CheckUser(user_id))
return;
System.out.println("去找真实角色实例帮忙处理事务……");
realrole.service("magc");
System.out.println("谢谢光临……");
}
}
2
3/**
4 * @author magc
5 * 代理模式测试类
6 * 作为客户端去请求调用代理类的接口。
7 * 客户端只能访问代理类,而不能访问真实角色类
8*/
9publicclass ProxyTest {
10
11/**
12 * @param args
13*/
14publicstaticvoid main(String[] args) {
15
16 ProxyRole proxy = new ProxyRole();
17 proxy.service("magc");
18 }
19
20 }