`
gengu
  • 浏览: 84801 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

代理模式

阅读更多

java中代理模式是使用最最广泛的一个模式了

 

在当今最流行的hibernate和Spring中都可以看到它的广泛应用。

比如说在hibernate中的延迟加载和Spring中的AOP.都有它巨大的功劳。

 

它的中心思想是,为其他对象提供一种代理以控制对这个对象的访问。

有三个角色,抽象主题角色,具体实现角色,代理主题角色

 

package com.gengu.代理;
/**
 * 代理类接口
 * */
public interface Subject {

	/**这个接口定义了所被代理的类所应该实现的方法*/
	public void doSomething();
	
	public void doAnyThing();
}

 具体实现角色

package com.gengu.代理;

public class RealSubject implements Subject{

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

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

 代理主题角色

package com.gengu.代理;

/**这是Concrete的代理类*/
public class ProxySubject implements Subject{

	private Subject iProxy;
	
	public ProxySubject(Subject iProxy){
		
		this.iProxy = iProxy;
	}
	
	@Override
	public void doAnyThing() {
		before();
		this.iProxy.doAnyThing();
		after();
	}

	@Override
	public void doSomething() {
		before();
		this.iProxy.doSomething();
		after();
	}

	private void before(){
		System.out.println("调用方法前");
	}
	private void after(){
		System.out.println("调用方法后");
	}
}

 看了这个代码能很强烈的感受到面向切面编程中的思想。

 

它的优点是:职责清晰,高扩展性,智能化。

 

在Spring中的代理模式是这样的:如果一个类实现了接口那么,就会使用JVM自带的动态代理机制,如果没有实现接口,那么会使用CGLIB类实现动态代理。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics