Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 重载单例类的实例函数_Design Patterns_Singleton - Fatal编程技术网

Design patterns 重载单例类的实例函数

Design patterns 重载单例类的实例函数,design-patterns,singleton,Design Patterns,Singleton,在下面的代码段中,我将传递日志文件的文件名,这是重载实例函数以接受参数的最佳方法。这样做好吗 Logger.GetIntance(“温度日志”) Logger.GetIntance().WriteLog(“程序 启动) 是否有更好的方法来实现相同的目标?getInstance()不是实例方法。这是一种静态方法。如果Logger是单例,那么从逻辑上讲,您不能有两种不同的方法来获取同一实例 如果需要初始化单例,那么在类本身中进行初始化。无论如何,它将在一个地方初始化,所以它最好在里面 但是记录器很少

在下面的代码段中,我将传递日志文件的文件名,这是重载实例函数以接受参数的最佳方法。这样做好吗

Logger.GetIntance(“温度日志”)

Logger.GetIntance().WriteLog(“程序 启动)

是否有更好的方法来实现相同的目标?

getInstance()
不是实例方法。这是一种静态方法。如果
Logger
是单例,那么从逻辑上讲,您不能有两种不同的方法来获取同一实例

如果需要初始化单例,那么在类本身中进行初始化。无论如何,它将在一个地方初始化,所以它最好在里面


但是记录器很少是单例的,
Logger.getInstance(…)
通常返回一个新实例。因此,可以重载它。

如果您想遵循设计模式,那么我建议您使用类中的文件名初始化记录器。如果在这段时间内文件名不为人所知(它会改变),那么你是否需要一个单例就成问题了。

我认为这不是一个好主意。我以前从未见过这种方法。如果你有一个“SetFileName”函数或什么的话不是更好吗?你能告诉我为什么不能用两种不同的方法来获得同一个实例吗?