转自http://arch.pconline.com.cn/pcedu/empolder/net/0405/371995.html
当我们需要使用的对象很复杂或者需要很长时间去构造,这时就可以使用代理模式(Proxy)。例如:如果构建一个对象很耗费时间和计算机资源,代理模式(Proxy)允许我们控制这种情况,直到我们需要使用实际的对象。一个代理(Proxy)通常包含和将要使用的对象同样的方法,一旦开始使用这个对象,这些方法将通过代理(Proxy)传递给实际的对象。
一些可以使用代理模式(Proxy)的情况:
一个对象,比如一幅很大的图像,需要载入的时间很长。
一个需要很长时间才可以完成的计算结果,并且需要在它计算过程中显示中间结果
一个存在于远程计算机上的对象,需要通过网络载入这个远程对象则需要很长时间,特别是在网络传输高峰期。
一个对象只有有限的访问权限,代理模式(Proxy)可以验证用户的权限
代理模式(Proxy)也可以被用来区别一个对象实例的请求和实际的访问,例如:在程序初始化过程中
可能建立多个对象,但并不都是马上使用,代理模式(Proxy)可以载入需要的真正的对象。
这是一个需要载入和显示一幅很大的图像的程序,当程序启动时,就必须确定要显示的图像,但是实际的图像只能在完全载入后才可以显示!这时我们就可以使用代理模式(Proxy)。
这个代理模式(Proxy)可以延迟实际图像的载入,直到它接收到一个paint请求。在实际图像的载入期间我们可以通过代理模式(Proxy)在实际图像要显示的位置预先载入一个比较小、简单的图形。
(其他的内容)
附:
static 指定变量,常量,方法属于类,而不属于类的实例。
例如一个类(Settings)有一个公共的静态方法getInstance(),如果想要调用getInstance(),则使用的是Settings.getInstance()。(而不是先创建一个Settings的实例如xx,再使用xx.getInstance(),这样是错误的)
danymic 指类的实例可在运行时添加动态的属性
疑问::::一段关于代理重写属性的代码
flash_proxy override function getProperty(tt:*):* {
trace (data[tt.toString()]);
return data[tt.toString()];
}
data为XML类型(已载入了外部XML文件),在文档类中确定tt的值,比如说tt是data的一个子节点,为什么写成trace(data.tt);或者trace (data.(tt.toString()));
却没有输出呢?data[]又是一种怎么的访问方式???先搁着把代理搞完了再弄这个。
当我们需要使用的对象很复杂或者需要很长时间去构造,这时就可以使用代理模式(Proxy)。例如:如果构建一个对象很耗费时间和计算机资源,代理模式(Proxy)允许我们控制这种情况,直到我们需要使用实际的对象。一个代理(Proxy)通常包含和将要使用的对象同样的方法,一旦开始使用这个对象,这些方法将通过代理(Proxy)传递给实际的对象。
一些可以使用代理模式(Proxy)的情况:
一个对象,比如一幅很大的图像,需要载入的时间很长。
一个需要很长时间才可以完成的计算结果,并且需要在它计算过程中显示中间结果
一个存在于远程计算机上的对象,需要通过网络载入这个远程对象则需要很长时间,特别是在网络传输高峰期。
一个对象只有有限的访问权限,代理模式(Proxy)可以验证用户的权限
代理模式(Proxy)也可以被用来区别一个对象实例的请求和实际的访问,例如:在程序初始化过程中
可能建立多个对象,但并不都是马上使用,代理模式(Proxy)可以载入需要的真正的对象。
这是一个需要载入和显示一幅很大的图像的程序,当程序启动时,就必须确定要显示的图像,但是实际的图像只能在完全载入后才可以显示!这时我们就可以使用代理模式(Proxy)。
这个代理模式(Proxy)可以延迟实际图像的载入,直到它接收到一个paint请求。在实际图像的载入期间我们可以通过代理模式(Proxy)在实际图像要显示的位置预先载入一个比较小、简单的图形。
(其他的内容)
附:
static 指定变量,常量,方法属于类,而不属于类的实例。
例如一个类(Settings)有一个公共的静态方法getInstance(),如果想要调用getInstance(),则使用的是Settings.getInstance()。(而不是先创建一个Settings的实例如xx,再使用xx.getInstance(),这样是错误的)
danymic 指类的实例可在运行时添加动态的属性
疑问::::一段关于代理重写属性的代码
flash_proxy override function getProperty(tt:*):* {
trace (data[tt.toString()]);
return data[tt.toString()];
}
data为XML类型(已载入了外部XML文件),在文档类中确定tt的值,比如说tt是data的一个子节点,为什么写成trace(data.tt);或者trace (data.(tt.toString()));
却没有输出呢?data[]又是一种怎么的访问方式???先搁着把代理搞完了再弄这个。