Java静态代理

.

代理模式:就是为目标对象提供一种代理已达到控制对象真实对象访问的目的
  

在一些情况下,一些客户不能直接或不想直接访问目标对象,而代理对象则起到在这两者之间的的"中介人"作用.


=========================================================================================

角色描述:

①代理类和目标类共同的接口

②目标类

③代理类

④测试类(非必须)


=========================================================================================案例分析:

1.共同接口

package com.gyoomi.e_staticproxy;
/**
 * 
 * @ClassName: Subject
 * @Description: 代理类和抽象类的共同的接口
 * @author gyoomi
 * @date 2017年9月18日
 *
 */
public interface Subject {
	public void eat();
}
2.目标类

package com.gyoomi.e_staticproxy;

/**
 * 
 * @ClassName: RealSubject
 * @Description: 目标类
 * @author gyoomi
 * @date 2017年9月18日
 *
 */
public class RealSubject implements Subject {

	@Override
	public void eat() {
		System.out.println("real subject eat somethings");
	}
}
3.代理类
package com.gyoomi.e_staticproxy;
/**
 * 
 * @ClassName: ProxySubject
 * @Description: 代理类(静态代理--->编译前就已存在)
 * @author gyoomi
 * @date 2017年9月18日
 *
 */
public class ProxySubject implements Subject{
	//代理类内部包含对真实类的引用
	private RealSubject  realSubject = new RealSubject();
	
	@Override
	public void eat() {
		//真实目标类之前做一些其他操作
		this.preEat();
		
		//真实目标类要完成的事情
		realSubject.eat();
		
		//真实目标类之后做一些其他操作
		this.postEat();
	}
	
	//前方法
	private void preEat() {
		System.out.println("before eating...");
	}
	//后方法
	private void postEat() {
		System.out.println("after eating...");
	}

}

===================================================================================================================================

4:测试类(非必须):

package com.gyoomi.e_staticproxy;
/**
 * 
 * @ClassName: Client
 * @Description:客户端测试类
 * @author gyoomi
 * @date 2017年9月18日
 *
 */
public class Client {
	public static void main(String[] args) {
		Subject proxy = new ProxySubject();
		proxy.eat();
	}
}
结论:
按照上述的方式(静态代理)使用代理模式,那么真实角色必须是实现已经存在的,并将其作为代理对象的内部属性。

但是实际使用时,一个真实角色必须对应一个代理角色,但如果大量使用会导致类的急剧膨胀;此外,如果事先并不知道真实角色,该如何使用代理呢?接下来就是JDK的动态 代理!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值