GVKun编程网logo

静态方法还是Singleton,该选择哪一种?(静态方法和普通方法)

10

在本文中,我们将详细介绍静态方法还是Singleton,该选择哪一种?的各个方面,并为您提供关于静态方法和普通方法的相关解答,同时,我们也将为您带来关于(PHP)Singleton数据库类–静态方法怎

在本文中,我们将详细介绍静态方法还是Singleton,该选择哪一种?的各个方面,并为您提供关于静态方法和普通方法的相关解答,同时,我们也将为您带来关于(PHP)Singleton数据库类 – 静态方法怎么样?、Android SingleTask,SingleTop和Home Button、Android vs iOS,你应该选择哪一个?、android – Dagger 2 Singleton vs Real Singleton的有用知识。

本文目录一览:

静态方法还是Singleton,该选择哪一种?(静态方法和普通方法)

静态方法还是Singleton,该选择哪一种?(静态方法和普通方法)

在Java中哪个更好,

实现公共静态方法,例如

Factory.createLoginRequest()

或实施Singleton模式,例如

Factory.getInstance().createLoginRequest()

(两个都将返回一个Request对象。)

哪个更好, 为什么

答案1

小编典典

来自维基百科:

请注意,类的简单静态实例和单例实例之间的区别:尽管单例实例可以实现为静态实例,但也可以延迟构造它,直到需要时才需要内存或资源。另一个显着区别是,静态成员类无法实现接口,除非该接口只是标记。因此,如果类必须实现由接口表示的协定,则实际上必须是单例。

(PHP)Singleton数据库类 – 静态方法怎么样?

(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;
}

}

解决方法

是的,你可以使$db静态:

static private $db;

我假设这是你需要的,因为你是从静态方法访问它.如果有任何理由你不想要这个,那必然意味着该方法可能不应该是静态的.

编辑:

根据@zerkms(谢谢)注释,您可以使用self :::访问静态变量

self::$db = Db::getInstance();

Android SingleTask,SingleTop和Home Button

Android SingleTask,SingleTop和Home Button

在我的应用程序中,有一种我不理解的行为.我将MainActivity A作为SingleTask.
它调用的活动B也是SingleTask.
当我按下第二个活动中的主页按钮打开另一个应用程序,然后我尝试去我的应用程序mantaining Home按钮按下我总是去主要活动,我想要打开第二个活动维持当时的状态我按下主页按钮.

我已经尝试将第二个活动设置为singletop,但它不起作用.

有帮助吗?

解决方法

当使用singleTask同时定义主要活动时,活动返回堆栈的行为变得很奇怪:

<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,你应该选择哪一个?

Android vs iOS,你应该选择哪一个?

WebOS 淡出我们的视界,Blackberry Playbook 虽好犹败,剩下的我们可以相信的,在 Windows 8 出来之前,唯有 iOS 和 Android 了。我终于亲手弄到了一个 Android 设备,花了上周一周的时间,努力看自己所掌握的理论知识和对之前所拥有的一款 Android 设备(它上面还是 1.6 的 API,在 Android 领地地,算是古董了)的印象,是否印证现实。对这两大移动操作系统的完全拆解和深入比较,请见下文。

iosandroid



iosandroid




filesystemcomp
文件系统比较

主屏幕比较
主屏幕比较

Android状态条
Android 状态条

国际化比较
国际化比较

zinio比较
zinio 比较

笔记应用
笔记应用

应用商店
应用商店

20111109-101405.jpg
硬件

DSC05780-e1322434326447.jpg
设备接口

转载请注明:Linux 人社区 > 英文资讯翻译专版。编译

详细内容见 http://www.nothingbuttablets.com/6881(英文)   

android – Dagger 2 Singleton vs Real Singleton

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的相关信息,请在本站寻找。

本文标签: