您的位置:首页 > 编程语言 > Java开发

java设计模式之代理模式程序举例

2015-08-18 14:56 357 查看
代理模式:
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理模式是一种结构性设计模式。当客户端不想直接调用主题对象,而希望主题对象的行为前后加上预处理或者后续处理时,则可以使用代理模式。

代理模式的三种角色:主题抽象类、实际主题类、代理类。

主题抽象类:

package com.yihai.spring.proxy;

public abstract class Subject {
	//主题抽象类定义了主题对象的行为,下面的例子中主题抽象类定义了主题对象的request行为。
	public abstract void request();
}


实际主题类:

package com.yihai.spring.proxy;

//实际主题类继承了抽象主题类Subject,实现了抽象主题类中的行为request。实际主题类就是AOP中的目标对象。
public class RealSubject extends Subject {
	@Override
	public void request() {
		System.out.println("RealSubject--实际主题类");
	}

}
代理类:

package com.yihai.spring.proxy;
/**
 * 代理类继承了抽象主题类,同时关联了实际主题类。代理类中定义了
 * preRequest和postRequest方法,对实际主题类中的request
 * 方法实施了控制。代理类对应Spring AOP中的ProxyFactoryBean
 * 类,用来生成代理对象。
 */
public class ProxySubject extends Subject {
	//代理类关联实际主题类
	private RealSubject realSubject;
	@Override
	public void request() {
		preRequest();//自定义的方法,方法中可以实现一些想在请求之前就要完成的逻辑
		if(realSubject==null){
			realSubject = new RealSubject();
		}
		realSubject.request();
		postRequest();//自定义的方法,方法中可以实现一些想在请求之后想要完成的逻辑
		
	}
	//自定义方法:代理之前完成的逻辑
	private void preRequest() {
		System.out.println("--------------代理之前完成的业务逻辑输出------------");
	}
	//自定义方法:代理之后完成的逻辑
	private void postRequest() {
		System.out.println("--------------代理之后完成的业务逻辑输出-------------");
	}
	
	//main方法
	public static void main(String[] args) {
		ProxySubject proxySubject = new ProxySubject();
		proxySubject.request();
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: