我现在要留下这个问题,因为这样的事情可能会或可能没有有效的用例。对于我的情况,这是一个设计问题,而不是使用Singleton,我找到了一个自然的位置来创建一个普通对象的实例,并传递对它的引用是必要的。由于它现在是一个普通的对象,我可以再次使用构造函数注入。
我认为我认为适当使用Singleton。它是一个懒惰地加载文件夹和文件类型的图像,以便在JRuby,SWT应用程序中使用。
该课程将如下所示。这些方法需要一个Display实例来创建图像。
问题是,注入Display对象的原因是什么?为什么?
如果Display不可用,我正在考虑使用begin ... rescue
块将@display的值设置为nil,然后为单元测试提供setter。
当我认为我需要一个Singleton时,我总是想知道我做错了什么,当我需要用Singleton做一些不寻常的事情时更是如此,所以我不会排除其他选择。
require "singleton"
class FileSystemIcons
include Singleton
attr_accessor :display, :cached_folder_image, :cached_file_images
def initialize
@display = Display.display
@cached_folder_image = nil
@cached_file_images = {}
end
def folder_image
unless cached_folder_image
...
self.cached_folder_image = converted_image
end
cached_folder_image
end
def file_image file_name
...
unless cached_file_images[ext]
...
cached_file_images[ext]
end
end
end
答案 0 :(得分:0)
我个人更喜欢构造函数注入,无论对象是否是单例。这确保了创建后完全初始化的对象。因此,bar
的处理也应该是构造函数的一部分。
Display.display.nil?