2013-04-24 102 views
0

我想了解一些我们需要使用实例变量的延迟初始化的实际场景。对于所有线程都具有相同文件处理程序的场景,我使用了Singleton模式作为静态变量,但在实际使用场景时并不确定。在实例变量上实际使用延迟初始化

问候, Ramakant

+0

不要认为它是“懒惰初始化”,可以认为它是“缓存”。 – 2013-04-24 17:28:34

+0

任何时候你编写一个库,例如,你甚至不知道是否所有的函数都会被调用。 – radai 2013-04-24 17:29:14

+0

所有的类和方法都是在初始化的情况下加载的,在这种情况下,你一直在使用它,而不知道它。 – 2013-04-24 19:06:40

回答

0

例如,你有哪些有关联的图像的实体User,所以当你阅读的用户,你并不总是需要的图像,所以尝试加载图像懒洋洋当实际需要它

1

无论单身是非常耗费资源(内存,处理能力,带宽,网络端口等),您只希望根据需要创建它,因为在从不需要单例的情况下,初始化急切地浪费资源。

另一个原因:如果资源初始化单例只在实际需要单例时存在,它可以使你的系统更健壮。例如。假设单例是一个打印后台处理程序。如果系统中当前没有打印机,则不值得分配试图连接到不存在的打印机的假脱机程序。由于用户在系统中没有打印机时不应请求打印,因此懒惰后台打印程序提供了完全正确的行为,没有明确的逻辑。用户永远不会请求pringing,因此后台打印程序不会初始化,并且永远不会尝试失败的连接。

其他惰性初始化有意义的资源密集型单例的例子:记录器,独特的SOA服务,唯一的一般网络服务,缓存管理器,负载均衡器,伪随机数字流生成器,资源管理器。

0

也许模板库的模板抽象。模板被初始化为String,但只有在模板被实际请求/运行时才被编译为快速内部表示。