1

org.mozilla.javascript.Context現在のスレッドにバインドされた新しいオブジェクトを作成するために(とりわけ)使用されるユーティリティクラスを作成しています。単一のグローバルJavaScriptスコープがあり、複数のインポート/初期化ステートメントなどが含まれている場合があります。

外部クラスで、関数を明示的に使用せずに、Utility.getContext()とを使用するだけで、将来の実行のためにContextオブジェクトとScopeオブジェクトを取得できるようにしたいと思います。コンテキストとスコープの両方が単一インスタンスである必要があるため、シングルトンパターンが必要です。Utility.getScope()getInstance()

次のコードは意味がありますか?

public class Utility {
    private static Utility instance;
    private static ScriptableObject scope = null;

    private Utility() {}

    private static Utility getInstance() {
        synchronized (Utility.class) {
            if (instance == null)
                instance = new Utility();
            return instance;
        }
    }

    private static Context getSingletonContext() {
        Context context = Context.getCurrentContext();
        if (context == null)
            context = Context.enter();
        if (scope == null) {
            scope = new ImporterTopLevel(context);
            Script script = context.compileString("Global JavaScript Here","Script Name",1,null);
            script.exec(context,scope);
            scope.sealObject();
        }
        return context;
    }

    public static Context getContext() {
        return getInstance().getSingletonContext();
    }

    public static Scriptable getScope() {
        Scriptable newScope = getContext().newObject(scope);
        newScope.setPrototype(scope);
        newScope.setParentScope(null);
        return newScope;
    }
}
4

1 に答える 1

5

1.公開する

public static Utility getInstance()

2.このメソッドを除いて、クラス内のすべてのメソッドを静的にする必要はありませんgetInstance()

3.他のクラスでこのクラスのシングルトン オブジェクトにアクセスしようとするときは、このようにします。

Utility ut = Utility.getInstance();

これが、Utility クラスのメソッドを静的にする必要がない理由です。getInstance()

4. Singletonを取得するには 3 つの方法があります。

私。同期方式

ii. ダブルチェックロックを使用した同期ステートメント。

iii. 定義時に静的オブジェクト参照変数を初期化しています。

例えば:

定義時の静的オブジェクト参照変数の初期化

private static Utility instance = new Utility();

private Utility() {}

    private static Utility getInstance() {

           return instance;                  // WILL ALWAYS RETURN SINGLETON
                                      // REFER HEAD FIRST DESIGN PATTERN BOOK FOR DETAILS

    }
于 2012-07-18T04:51:21.857 に答える