Java设计模式:代理模式

本文介绍Java设计模式中的代理模式,包括其基本概念、实现步骤及应用场景。代理模式允许在不改变原有对象的前提下添加新的功能,适用于远程对象、创建开销大的对象或需要安全控制的对象。

Java设计模式:代理模式

    【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/52015707
     使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),且可以在不改变目标对象的情况下添加一些额外的功能。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,完成各种操作,并可以扩展功能。简而言之,可以通过代理完成真实的意图操作,并可以扩展业务功能
    Subject:抽象主题角色,抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义,无特殊要求。
    RealSubject:具体主题角色,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。
    Proxy:代理主题角色,也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后工作。代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。 

     就比如,我想找一份百度的工作,就有两种方式选择,(1)不用人帮忙,我自己瞎找(2)另外一种就是通过别人代理方式找,比如通过在百度工作的师兄师姐内推的方式,这种情况,只需要传递一个找工作的对象,告知师兄师姐代理就可以,师兄师姐帮你找到想要的工作,还可以推荐其他相关的工作给你,这就扩展原来的功能啦。
(1)接口:定义主题主要功能
/**
 * 接口:定义主题主要功能
 */
public interface Object {
	public abstract void operation();
}
(2)具体主题,真实的具体操作,但该操作不在客户端直接调用
/**
 * 具体主题,真实的具体操作,但该操作不在客户端直接调用
 */
public class RealObject implements Object {
	@Override
	public void operation() {
		System.out.println("在RealObject类中,真实的具体操作");
	}
}
(3)代理类,代理真实的操作
/**
 * 代理类,代理真实的操作
 */
public class ProxyObject implements Object {
	private Object obj;

	public ProxyObject(Object obj) {
		this.obj = obj;// 设置代理的子类,即需要代理的真实对象
	}
	@Override
	public void operation() {
		// 调用目标对象之前可以做相关操作
		System.out.println("在ProxyObject代理类中,调用目标对象之前可做相关的业务操作");
		obj.operation();
		// 调用目标对象之后可以做相关操作
		System.out.println("在ProxyObject代理类中,调用目标对象之后还可做相关的业务操作");
	}
}
(4)客户端程序
//客户端
public class Client {

	public static void main(String[] args) {
		System.out.println("---------不使用代理-------------");
		Object obj;// 定义接口对象
		obj = new RealObject();// 实例化真实的对象
		obj.operation();// 直接使用真实类操作
		System.out.println("---------使用代理-------------");
		ProxyObject proxy = new ProxyObject(obj);// 传入代理的真实操作对象obj,由代理完成操作
		proxy.operation();// 获得操作结果
	}

}
输出:
---------不使用代理-------------
在RealObject类中,真实的具体操作
---------使用代理-------------
在ProxyObject代理类中,调用目标对象之前可做相关的业务操作
在RealObject类中,真实的具体操作
在ProxyObject代理类中,调用目标对象之后还可做相关的业务操作
     说明:代理模式中,代理类ProxyObject和真实类RealObject都实现了接口的方法,不同的是代理类的操作方法operation(),不仅调用了真实类的操作,还扩展了业务功能,因此通过代理的模式,不仅可以实现真实的功能,还可以扩展业务功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI吃大瓜

尊重原创,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值