Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Java android中的单态替换_Java_Android_Design Patterns_Singleton - Fatal编程技术网

Java android中的单态替换

Java android中的单态替换,java,android,design-patterns,singleton,Java,Android,Design Patterns,Singleton,我正在阅读设计模式,发现不鼓励使用单例。 我目前正在做的项目大量使用了单例。 一个例子是应用程序的设置状态由一个名为SettingsHandler的单例程序访问和更改。 在第一次创建应用程序时,SettingsHandler类被实例化,它开始从共享首选项加载设置值并将值保存在其本地字段中,然后从代码中需要的任何位置调用SettingsHandler.getInstance(context).getIsSettingXYEnabled()以获取应用程序设置的状态,代码中有许多地方需要了解设置的状态

我正在阅读设计模式,发现不鼓励使用单例。 我目前正在做的项目大量使用了单例。 一个例子是应用程序的设置状态由一个名为SettingsHandler的单例程序访问和更改。 在第一次创建应用程序时,SettingsHandler类被实例化,它开始从共享首选项加载设置值并将值保存在其本地字段中,然后从代码中需要的任何位置调用SettingsHandler.getInstance(context).getIsSettingXYEnabled()以获取应用程序设置的状态,代码中有许多地方需要了解设置的状态。当然,您也可以通过先在singleton字段中保存值,然后在shared preferences中保存值来保存设置状态,以便在下次加载应用程序时使用


我的问题是:如果单身是邪恶和坏的,没有它我怎么做?我确信我只需要appsettings类的一个实例,并且我需要在代码中的许多不同位置访问它。例如,我可以在应用程序启动时创建一次实例,然后在代码中传递该引用,但这将是一个很大的混乱,因为我将不得不将其作为参数传递给许多构造函数,所以这里有什么替代方法使代码更干净?

“不鼓励使用单例”——真正的单身汉是不被鼓励的。然而,特别是在Android应用程序开发中,看起来像单身的事情很常见。。。只要它们是由依赖倒置框架(例如,剑柄匕首)配置和提供的。从编程的角度来看,它们感觉有点像单例,但我们可以根据需要替换它们,例如用于测试。