设计模式----代理模式(Proxy)

为另一个对象提供一个替身或占位符以控制对这个对象的访问

代理模式的组成:

主题接口(Subject)提取真正主题与代理的公共方法,让使用真正主题的地方也能用代理代替。

真正主题(RealSubject)真正处理请求的类。

代理(Proxy)真正主题的代理类,请求方通过调用代理对象间接调用真正主题。

代理模式的简单例子

(主题接口类)Subject.java

package xu.neng.Proxy;

public interface Subject {
	public void request();
}

(正真主题类)RealSubject.java

package xu.neng.Proxy;

public class RealSubject implements Subject{
	@Override
	public void request() {
		System.out.println("竟敢调用我!!!");
	}
}

(代理类)Proxy.java

package xu.neng.Proxy;

//必须和被代理对象继承统一接口
public class Proxy implements Subject {
	RealSubject realSubject;

	public Proxy() {
		this.realSubject = new RealSubject();
	}

	// 从构造方法中传入被代理的对象
	public Proxy(RealSubject realSubject) {
		this.realSubject = realSubject;
	}

	// 调用方法
	@Override
	public void request() {
		realSubject.request();
	}
}

(测试类,即Client)Test.java

package xu.neng.Proxy;

/**
 * 测试代理模式。(相当于UML图中的Client)
 * 
 * @author neng
 * 
 */
public class Test {
	public static void main(String[] args) {
		// 我想调用RealSubject出来玩玩
		Proxy proxy = new Proxy(new RealSubject());
		proxy.request();
	}
}


代理模式的应用:


iOS开发中常用。代理模式更像是一种思想,通过中间手段来控制正真对象的访问,同时还可以做一些包装。

防火墙代理:控制网络资源的访问、保护主题免于坏客户的侵害。
智能引用代理:当主题被引用时,可以进行额外的动作。如进行引用计数等。
缓存代理:为开销大的运算结果提供临时存储。允许多个客户共享结果,以减少计算或网络延迟。(本质上还是额外做其他事情)
同步代理:多线程时,为主题提供安全的访问。
写入时复制代理:用来控制(延迟)对象的复制,直到客户真的需要为止。


参考一篇很有意思的文章:http://yangguangfu.iteye.com/blog/815787


转载请注明出处:http://blog.csdn.net/xn4545945  



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值