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

java设计模式学习笔记之代理模式

2016-12-18 22:53 459 查看

java设计模式学习笔记之代理模式

尊重原创,转载请注明出处 http://blog.csdn.net/qq137722697

这是一个使用策略模式构建模式设计的网络请求框架,去看看吧《[倾力之作]android轻量级网络请求框架MyHttputils2.1.6

定义

对其他对象提供一种代理以控制对这个对象的访问

代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。

场景还原

前段时间,本人出差,不巧的是之前在老家买的房子要签合同(想想就好了),这不能马上回去啊,咋办呢?这时我想到了我老爸让他帮我去弄一下;这就是今天的主题代理模式,来看看用代码怎么搞出来。

首先,得有一个签合同的业务吧?咋们要把这个抽取为一个接口

/**
* 签合同业务
* Created by HDL on 2016/12/2.
*/
public interface ISignModule {
void sign();//签合同
}


要是我不出差,那么我是可以自己签约的,所以我拥有签约的行为

/**
* 我自己可以签约的
* Created by HDL on 2016/12/2.
*/
public class MySelfSign implements ISignModule {
@Override
public void sign() {
System.out.println("合同签订成功,房子到手");
}
}


不巧的是我出差啊,于是我想到了我老爸去帮我签,所以我老爸也有了签约的行为(此时就是我老爸作为代理人代理我签约)

/**
* 我的父亲也可以代我签约
* Created by HDL on 2016/12/2.
*/
public class MyFatherProxy implements ISignModule {
MySelfSign mySelfSign;

@Override
public void sign() {
if (mySelfSign == null) {
mySelfSign = new MySelfSign();
}
mySelfSign.sign();
}
}


此时,我老爸来到售楼部的办公室签约,房子到手了

public static void main(String[] args) {
MyFatherProxy myFatherProxy=new MyFatherProxy();
myFatherProxy.sign();
}




代理模式还是很简单的,光从字面意思就知道,由于某种原因真正要做某事的人(被代理人)不能亲自去处理,此事他可以委托别人去处理(代理人),从而得到某种结果。

代理模式的应用

1、远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。(大白话就是这件事我没空处理,找个人帮我搞一下就可以了——- 一开始的例子就是这种情况)

2、虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。打个比方:你在浏览新闻的时候,此时新闻图片比较大或者网络比较忙,你最先只能看到文字,图片是用一张灰色的本地图片来代替的,等加载完成了才显示出来,以达到优化的目的。

3、安全代理,用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候

4、智能指引,是指当调用真实的对象时,代理处理另外一些事。比如现在好多的新闻都有浏览量,当你点击查看详细信息的时候,会有代理程序自动将浏览量+1.

尊重原创,转载请注明出处 http://blog.csdn.net/qq137722697
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: