代理模式

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类实现动态代理。

 

 

发布了16 篇原创文章 · 获赞 3 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览