在本文中,我们将详细介绍静态方法还是Singleton,该选择哪一种?的各个方面,并为您提供关于静态方法和普通方法的相关解答,同时,我们也将为您带来关于(PHP)Singleton数据库类–静态方法怎
在本文中,我们将详细介绍静态方法还是Singleton,该选择哪一种?的各个方面,并为您提供关于静态方法和普通方法的相关解答,同时,我们也将为您带来关于(PHP)Singleton数据库类 – 静态方法怎么样?、Android SingleTask,SingleTop和Home Button、Android vs iOS,你应该选择哪一个?、android – Dagger 2 Singleton vs Real Singleton的有用知识。
本文目录一览:- 静态方法还是Singleton,该选择哪一种?(静态方法和普通方法)
- (PHP)Singleton数据库类 – 静态方法怎么样?
- Android SingleTask,SingleTop和Home Button
- Android vs iOS,你应该选择哪一个?
- android – Dagger 2 Singleton vs Real Singleton
静态方法还是Singleton,该选择哪一种?(静态方法和普通方法)
在Java中哪个更好,
实现公共静态方法,例如
Factory.createLoginRequest()
或实施Singleton模式,例如
Factory.getInstance().createLoginRequest()
(两个都将返回一个Request对象。)
哪个更好, 为什么 ?
答案1
小编典典来自维基百科:
请注意,类的简单静态实例和单例实例之间的区别:尽管单例实例可以实现为静态实例,但也可以延迟构造它,直到需要时才需要内存或资源。另一个显着区别是,静态成员类无法实现接口,除非该接口只是标记。因此,如果类必须实现由接口表示的协定,则实际上必须是单例。
(PHP)Singleton数据库类 – 静态方法怎么样?
private $db; public function __construct($id = null) { $this->db = Db::getInstance(); //singleton from the Db class
但是如果有静态方法,我就不能使用特定于对象的变量.
有什么比在静态方法中手动指定db变量更好的了吗?
public static function someFunction($theID){ $db = Db::getInstance();
编辑:使变量静态不能解决问题.访问未声明的静态属性.我仍然需要在静态函数中分配变量.问题是询问是否有解决方法.
我的数据库类(虽然对此讨论不重要):
class Db { private static $m_pInstance; private function __construct() { ... } public static function getInstance(){ if (!self::$m_pInstance) self::$m_pInstance = new Db(); return self::$m_pInstance; }
}
解决方法
static private $db;
我假设这是你需要的,因为你是从静态方法访问它.如果有任何理由你不想要这个,那必然意味着该方法可能不应该是静态的.
编辑:
根据@zerkms(谢谢)注释,您可以使用self :::访问静态变量
self::$db = Db::getInstance();
Android SingleTask,SingleTop和Home Button
它调用的活动B也是SingleTask.
当我按下第二个活动中的主页按钮打开另一个应用程序,然后我尝试去我的应用程序mantaining Home按钮按下我总是去主要活动,我想要打开第二个活动维持当时的状态我按下主页按钮.
我已经尝试将第二个活动设置为singletop,但它不起作用.
有帮助吗?
解决方法
<activity android:name=".MainActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
更糟糕的是官方开发指南中没有关于这个特殊用例的明确解释.与此主题相关的一些部分甚至是自相矛盾的.
尝试在MainActivity A上使用launchMode =“standard”,在Activity B上使用launchMode =“singleTask”,这将给出您描述的期望行为.
Android vs iOS,你应该选择哪一个?
WebOS 淡出我们的视界,Blackberry Playbook 虽好犹败,剩下的我们可以相信的,在 Windows 8 出来之前,唯有 iOS 和 Android 了。我终于亲手弄到了一个 Android 设备,花了上周一周的时间,努力看自己所掌握的理论知识和对之前所拥有的一款 Android 设备(它上面还是 1.6 的 API,在 Android 领地地,算是古董了)的印象,是否印证现实。对这两大移动操作系统的完全拆解和深入比较,请见下文。
iosandroid
文件系统比较
主屏幕比较
Android 状态条
国际化比较
zinio 比较
笔记应用
应用商店
硬件
设备接口
转载请注明:Linux 人社区 >
详细内容见 http://www.nothingbuttablets.com/6881(英文)
android – Dagger 2 Singleton vs Real Singleton
我想在我的项目中使用匕首2. Dagger提供了一个创建单例的好方法,我在项目中有一些,但是Dagger为每个@Singleton对象创建了一个新的对象图,每个新的容器,所以我们必须在应用程序级别创建组件,我们应该提供应用程序使用单身的类,这看起来不太好:(.
问题是:我应该保留我的旧单身人士吗?或者我应该使用匕首?
解决方法:
Dagger是管理单身人士的一种更好的方式,部分原因是你不需要担心在单元测试中如何替换这些单身人士:你的单身人士将通过你可以在单元测试中控制和覆盖的方式注入(即构造函数参数)和可访问的领域).
Dagger creates a new object graph with every new container for each @Singleton object so we have to create the component in the application level
如果您需要应用程序级单例,则需要在应用程序的生命周期中保留相同的组件实例,而不是为每个新的“容器”创建一个新的组件实例.该组件将包含并提供单例,因此您不需要在应用程序中激活多个对象图.如果某个外部创建者(例如Android或servlet引擎)在Dagger之外自己创建对象,这可能意味着您需要将Dagger组件保存在单例持有者(可能是线程安全的公共静态字段)中为你的老单身人士做的;这仍然应该更容易理解和维护,因为您可以通过Dagger提供尽可能多的单例,并且只担心组件本身的一个外部管理单例.
作为替代方案,您可以完全按原样保留旧单例,并在模块中编写@Provides方法,以在Dagger创建的对象请求它们时检索这些单例实例.这样您就可以随时随地创建新的对象图,并且您的单身人士仍将表现为单身人士.不过,我会对此提出警告,因为在这一点上,你的单身人士可以在你的应用程序中以两种不同的方式访问,只有那些由Dagger创建或Dagger管理的人才会在测试中被轻易覆盖;这可能令人困惑,难以管理.
关于静态方法还是Singleton,该选择哪一种?和静态方法和普通方法的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于(PHP)Singleton数据库类 – 静态方法怎么样?、Android SingleTask,SingleTop和Home Button、Android vs iOS,你应该选择哪一个?、android – Dagger 2 Singleton vs Real Singleton的相关信息,请在本站寻找。
本文标签: