《Design Patterns》Proxy.积跬步系列

Proxy:代理模式

先代码

共用接口:

package h.l.demo.proxy;
/**
 * 
 * @author: Is-Me-Hl
 * @date: 2020年2月15日
 * @Description: 真实类和代理类的共用接口
 */
public interface Subject {
     
	// 公共行为
	public void request();
}

被代理类及代理类:

package h.l.demo.proxy;
/**
 * 
 * @author: Is-Me-Hl
 * @date: 2020年2月15日
 * @Description: 被代理的类,实现了公共的接口
 */
public class RealSubject implements Subject {
     

	@Override
	public void request() {
     
		System.out.println("被代理类的行为...");
	}

}
package h.l.demo.proxy;
/**
 * 
 * @author: Is-Me-Hl
 * @date: 2020年2月15日
 * @Description: 代理类
 */
public class Proxy implements Subject {
     

	private RealSubject realSubject;

	@Override
	public void request() {
     
		if (realSubject == null) {
     
			realSubject = new RealSubject();
		}
		realSubject.request();
	}

}

测试类:

package h.l.demo.proxy;

/**
 * 
 * @author: Is-Me-Hl
 * @date: 2020年1月31日
 * @Description: 测试
 */
public class TestMainEnter {
     

	public static void main(String[] args) {
     
		Proxy proxy = new Proxy();
		proxy.request();
	}

}

测试结果:
在这里插入图片描述

后分析

  • 个人建议:写代码是件幸福的事,So,do it

代理模式,为其他对象提供一种代理以控制对这个对象的访问。从上面的Demo中就可以看出,Proxy代理类实际上是实现了相同的接口,在对应的行为中,用被代理类去调用了对应的行为。联系生活实际,和网上黄牛代购是一样的。怎么理解呢,比如说演唱会门票,实际上官方有提供给大家购票通道,但一般热门的演唱会老百姓好像也很难能从官方入口买到票,因为绝大部分的票都被黄牛抢了。我们从黄牛手中买到的票实际上就是官方卖给我们的票。这就是代理的一个过程,举例好像不是很切当,哈哈,那自个就看代码理解理解~。反正就表达那个意思对吧,大家都懂的。还有希望相关机关对黄牛这块能多多监管,别让黄牛再炒票了!!!

代理模式一般用在什么场合:

  • 远程代理,也就是一个对象可以在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。在我们的项目中使用WebService可以生成响应的文件夹和一些文件,其实他们就是代理,使得客户端程序调用代理就可以解决远程访问的问题。
  • 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。比如说打开一个很大的HTML网页,里面有大量的文字和图片,但你还是可以很快的打开它,此时你所看到的是所有的文字,但图片确实一张张下载后才可以看到,哪些位打开的图片呢,就是通过虚拟代理来代替了真实的图片,此时代理存储了图片的路径和尺寸,浏览器中就是使用代理模式优化下载的。
  • 安全代理,用来控制真实对象访问时的权限。
  • 智能指引,是指当调用真实对象时,代理处理另外一些事。如在访问一个对象前,可以附加一些内务处理。

实际上,看了代理模式的Demo,你会觉得装饰者模式好像和代理模式挺像的,都是拿被操作对象,进行一些列操作。网上也有一系列的文章在解释这两者有什么区别,其实区别就在于两个模式的使用时为了什么。装饰者模式是为了增强某个方法,比如说,手机可以打电话,使用装饰者模式后手机还可以听音乐,看电影等。代理模式,则是强调对对象的控制,比如小明要打电话,那么使用代理模式后,小明的秘书可以帮小明打电话。

其他例子:参考自《大话设计模式》
如男A替男B向女A表白。男A就属于代理,男B属于被代理。详细请自行去参考。


注:以上文章仅是个人总结,若有不当之处,望不吝赐教

你可能感兴趣的:(设计模式,设计模式,design,pattern,代理模式,Proxy,Java)