对象推迟实例化
来源:互联网 发布:美工设计助理骗局 编辑:程序博客网 时间:2024/04/30 00:22
通常在创建一个对象的时候将该对象实例化,但是何时应该对该对象进行实例化,还是有很多的细节需要考虑的,处理的好了,可以节省系统开销,处理的不好,会造成资源的浪费,特别是当有大批量的用户时,如果该用户并不需要使用该对象,但是代码的设计中当用户加载上程序时就开始实例化,必然造成服务器的负担。对于比较大的对象,在使用时再创建它。
代理模式:就是为在不直接操作对象的情况操作该对象提供一种代理方式。
授权机制:不同级别的用户对同一个对象的使用权限。比如论坛系统中的管理者,普通用户,中级用户、高级用户以及游客。
linux对不同用户的权限管理(授权机制)是否采用的是代理模式来实现的呢?
工厂模式也是来实例化一个对象,比如 String str = new String() , 可以用工厂模式来代替new来实例化一个对象,这样做的好处是什么呢?所以当需要实例化(new)一个对象时,需要注意是否可以使用工厂模式来代替实现。当把一个对象的实例化称作“生产一个对象”,那么工厂方法就可以很容易理解了,即由“工厂”来“生产(实例化)一个对象”,我们只要交给工厂一个目标,然后由工厂来“生产”出一个产品(实例化了对象)来。比如工厂有个方法叫 Product create(int whichOne)。
对于一个需要消耗很大空间(或者资源的)对象来说,比如打开一个含有很大图片的word文档,由于图片很大,加载速度比较慢,但实际上当我们点击打开word文档时,不应该等待很久再显示这个word文档,即不应该等待等待这个图片加载完了才启动word。为了解决这个问题,可以使用代理模式来处理,方法是:把对这个图片的实例化推迟到用户需要时再进行实例化,一方面是因为用户可能打开这个word并不会去操作这个图片对象,一方面是因为即便用户需要操作这个对象,那么仍可以创建一个小的对象来让用户对图片进行一些操作,这种代理也称之为虚拟代理(virtual proxy)。
类似的例子比如当用手机访问网页的时候,当使用GPRS流量来浏览时,有的浏览器会选择不加载图片,但是图片的占据的位置和大小保留了下来,当用户需要点击后,才可以看到图片,相当于一个超链接一样,这里也使用的是代理的思想,即加载一个网页是,并不会把实例化所有的图片对象,而是在需要的时候(即用户点击的时候)采取实例化这个对象。我们用如下的代码来表达这个过程。
interface Image{displayImage(String url);}class ImageProxy() implements Image{String targetURL;ImageProxy(String url){targetURL = url;}public void displayImage(String url){.../**这里是如何来根据url来下载图片并显示在指定的位置上*/...}}class client(){public static void main(String args[]){Image image = new ImageProxy(url);image.display();}}
写时拷贝(copy-on-write)使用的是虚拟代理模式来实现的,虚拟代理可以隐藏一个对象存在不同的地址空间的事实。比如java中的String类型,下面举个例子。
String str1 = "a";String str2 = "a";/*********/String str2 = "b";在str2的值变成b之前,str1和str2占用的相同的内存空间(即隐藏一个对象存在不同的地址空间的事实),str2更改成b之后,str2和str1的地址就不再相同,这时str2就是另外开辟一段内存空间,即当对象没有被修改时,就不去进行复制,而当其被修改时,再进行复制。这里以str1和str2举例,对于一些比较大和复杂的对象时,减少复制降低了复制的成本。
- 对象推迟实例化
- 日期推迟一周/一年/一月的实例
- 实例化类对象
- FromHandle 实例化对象
- 实例化 泛型 对象
- reflect实例化对象
- 对象实例化过程
- java实例化对象
- PHP实例化对象
- 对象实例化过程
- javascript对象实例化
- 如何实例化对象
- 对象实例化过程
- IO-对象实例化
- 实例化对象
- 推迟满足感
- 推迟满足感
- 推迟满足感
- Unable to load native-hadoop library 和 Snappy native library not loaded 的解决
- 两有序链表合并排序
- 字符串匹配之KMP算法
- 选择网站关键词的注意事项
- 调试STM32过程中遇到的问题总结(持续更新)--KEIL4+C语言
- 对象推迟实例化
- 改善C++ 程序的150个建议学习之建议32:借助工具监测内存泄漏问题
- Ibatis动态SQL标签用法
- AndroidManifest.xml解析
- tomcat中jsp引用图片img的src属性带中文路径无法显示的解决
- Connectionism
- 学习OpenCV——Kalman滤波 .
- 动态规划解最长公共子序列(LCS)问题 (附可打印LCS完整代码)
- 不影响网站模板,织梦5.5升级到5.7