6

私は仲間が「対」の質問のファンではないことを知っていますが...タイトルを少し言い換えても、対の部分はまだそこにあるので、なぜそれを隠すのですか.

基本的に、シングルトンまたは静的クラスを使用する必要がある場合とその理由、静的クラスができないシングルトンを提供できるもの、およびその逆を知りたいです。

長い間両方を使用してきましたが、どちらか一方を使用してはいけない理由がわかりません。

ありがとう。

4

1 に答える 1

8

どちらも基本的にグローバル変数であり、注意事項があります。静的クラスは継承を妨げ、シングルトンは醜く、プロパティ ルックアップでオーバーヘッドを追加します。どちらも自動テストを困難にします。

AS3 はグローバル変数をサポートしています。

静的:

package com.example
{
    public class Config
    {
        public static var VERSION:uint = 1;
    }
}

シングルトン:

package com.example
{
    public class Config
    {
        public static var instance:Config = new Config();

        public var version:uint = 1;

        public function Config()
        {
            //Boiler plate preventing multiple instances
        }
    }
}

グローバル変数:

package com.example
{
    public var config:Config = new Config();
}
class Config
{
    public var version:uint = 1;
}

ここで、実稼働アプリでクラスのインスタンスが 1 つだけ必要な場合でも、テストを記述するには複数のインスタンスが必要だとします。public class を作成し、リセットConfigに使用できます。com.example.config = new Config()グローバル変数を参照するすべての場所が新しいインスタンスを使用するようになり、継承などの凝った処理を行うこともできます。

例えば:

if(inDebugMode)
{
    com.example.config = new DebugConfig();
}
{
    com.example.config = new Config();
}
于 2012-12-09T08:14:03.017 に答える