001 静态代理模式

1、概念;

代理模式:为其他对象提供一种代理,以控制对该对象的访问;

使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程对象、创建开销大的对象、需要安全控制的对象;

 

2、类图;

3、使用场景;

1)代理远程对象,使得调用远程对象,就好像调用本地对象一样;

2)代理开销大的对象,使得开销大的对象在使用时才创建;

3)需要安全控制的对象,使用代理对象隔离客户端直接访问对象,由代理对象控制客户可访问对象的哪些方法;

4)代理对象可以在真实对象执行前、执行后等做一些额外的工作;

 

4、代码实现;

1)主题接口;

public interface Subject {
	void request();
}

 

2)主题具体实现类;

public class RealSubject implements Subject{
	@Override
	public void request() {
		System.out.println("i am real subject.");
	}
}

 

3)代理实现类;

public class RealSubjectProxy implements Subject{
	
	private RealSubject realSubject;
	
	public RealSubjectProxy() {
		realSubject = new RealSubject();
	}
	
	@Override
	public void request() {
		preRequest();
		realSubject.request();
		afterRequest();
	}
	
	private void preRequest(){
		System.out.println("prev request.");
	}
	
	private void afterRequest(){
		System.out.println("after request.");
	}
}

4)测试;

public class Client {
	
	public static void main(String[] args) {
		RealSubjectProxy proxy = new RealSubjectProxy();
		proxy.request();
		System.out.println("====================");
		
		RealSubject002Proxy proxy002 = new RealSubject002Proxy();
		proxy002.request002();
		System.out.println("====================");
	}
}

 

5、静态代理模式的不足;

1)RealSubject这个真实角色,由RealSubjectProxy这个代理类进行了代理。

2)当增加一个RealSubject2的真实角色时,RealSubject2中的方法为request2(),如果需要代理RealSubject2这个真实角色,那么可能就会多一个RealSubject2Proxy的代理类。

3)如果有很多的RealSubjectN的真实角色,那么就会有n个RealSubjectNProxy的代理类。举例如下:

4)这在某些场景下,静态代理是不允许的,例如真实角色有很多的情况下。

5)还有一种情况就是,只有在客户端使用时,才知道具体代理类是什么。这个时候,需要动态的生成代理对象,而静态代理无法满足。

6)当真实角色有很多,或是需要动态生成代理类时,可以选用动态代理模式;

7)动态代理,即在客户端真正使用时,根据被代理角色,动态生成出代理对象,来控制对被代理角色的访问;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值