设计模式-代理模式

设计模式的学习与使用在JAVA编写的程序中占有举足轻重的地位,因此笔者今天就简单的说一下设计模式中的代理模式


1.什么是代理模式?(取自《深入浅出设计模式》)

代理模式的定义为:为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而大力对象可以再客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。(很难记就是了,但是通过代码来体现他的定义,我认为更加直观和容易记住)


2.一些UML图和结构图(大致看一看就好,了解一个思想)

UML图:



结构图:





我们通过一些代码简单的展示一下代理模式的作用,比如说我们希望通过一个日志记录调用某个方法的一些细节,比如传入的参数,方法执行的时间等等。

如果不使用代理模式,这种日志的记录就会干涉到我们的业务逻辑,如:

这是我们的抽象方法接口:

public interface MyInterface {
	//这个方法实现我们的业务逻辑
	public void doOperation();
}
这是我们的实现:(我们就单纯的打印一些语句就好)

/*
 * 不使用代理类实现接口,只是单纯的实现接口需要做的操作
 */
public class RealClass implements MyInterface{

	//在这里实现我们的业务逻辑
	@Override
	public void doOperation() {
		doBefore();//记录方法的开始
		System.out.println("doOperation...");
		doAfter();//记录方法的结束
	}
}

我们调用这个方法时:

public class ProxyTest {
	public static void main(String[] args){
		//不使用代理模式
		RealClass realObj = new RealClass();
		realObj.doOperation();
		
		//使用代理模式
		//ProxyClass proxyObj = new ProxyClass(new RealClass());
		//proxyObj.doOperation();
	}
}

很明显,这种实现就会干涉到我们正常的业务逻辑

然而通过代理模式,我们可以这样实现:

public class ProxyClass implements MyInterface{
	
	private MyInterface realObj;
	
	public ProxyClass(MyInterface realObj){
		this.realObj = realObj;
	}
	
	@Override
	public void doOperation() {
		doBefore();
		realObj.doOperation();
		doAfter();
	}
	
	//记录方法执行的开始
	private void doBefore(){
		System.out.println("doBefore");
	}
	
	//记录方法执行的结束
	private void doAfter(){
		System.out.println("doAfter");
	}
}


那么调用我们的方法:

public class ProxyTest {
	public static void main(String[] args){
		//不使用代理模式
		//RealClass realObj = new RealClass();
		//realObj.doOperation();
		
		//使用代理模式
		ProxyClass proxyObj = new ProxyClass(new RealClass());
		proxyObj.doOperation();
	}
}
我们看到,尽管看起来是代理类完成了相应的工作,但是实际上在代理类的内部,还是之前的实现类完成了相应的工作,只不过通过代理模式我们剥离出来和业务逻辑无关的方法罢了。

不过,这也是代理模式的一个简单的应用,如果有什么问题,希望大家提出来!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值