0

最善の解決策が何であるかを知りたかっただけです(クラスフレームワークは一度しか存在できず、構成などを保持します)

以下を仮定します (静的):

public class Framework {
    private Framework() {}

    private static String something;
    private static Object somethingElse;

    public static synchronized void init() {
        something = "something";
        somethingElse = new SuperFancyObject();
    }

    public static String getSomething() { return something; }
    public static Object getSomethingElse() { return somethingElse; }
}

これで、次を呼び出して、そのクラス内のすべてのメソッドをどこでも使用できます。

public void invoke(Request request, Response response) {
    ...
    Framework.getSomething();
    ...
}

他の解決策は次のとおりです。

public class Framework {
    private static String something;
    private static Object somethingElse;

    public Framework() {
        something = "something";
        somethingElse = new SuperFancyObject();
    }

    public String getSomething() { return something; }
    public Object getSomethingElse() { return somethingElse; }
}

したがって、これを使用するには、オブジェクト/クラスをパラメーターとして渡す必要があります。

public void invoke(Framework framework, Request request, Response response) {
    ...
    framework.getSomething();
    ...
}

おそらく3番目の解決策は、静的+シングルトンです。

私が今知りたいのは、どちらがより良い、よりクリーンな(おそらくセクシーな)ソリューションですか、それともあなたが好むものですか?

ありがとう!

4

4 に答える 4

2

多くの場合、基本的にシングルトンは置換可能であり、テストがより簡単なため、静的クラスよりもシングルトンの方が適しています。

マーティン・ファウラーはそれについて何か書いています:

http://martinfowler.com/bliki/StaticSubstitution.html

于 2013-01-31T12:03:02.980 に答える
0

より読みやすいものを使用してください。たとえば、一度だけ存在できると言う場合は、SingletonFrameworkを作成する必要があります。Frameworkこれは、プログラム/オブジェクトが何をすべきかを直接表現しています。

セクシーさを考えるな、コミュニケーションを考えろ。たとえば、私が15世紀の英語で話しかけたら、あなたは本当に怒るでしょう。あなたはシャベルで洗われませんか?

于 2013-01-31T12:03:53.183 に答える
0

クラスを変更できます:

public class Framework {

    private String something;

    /** Singleton instance */
    private static Framework iSingleton = new Framework();     // SINGLETON

    protected Framework(){
          //init
     }

    public static String getSomething() {
         return iSingleton.something;
    }
}

あなたの呼び出しメソッドでは、フレームワーク インスタンスは必要ありません。これを呼び出すことができます:

public void invoke(Framework framework, Request request, Response response) {

    Framework.getSomething();   //Call static method.
}
于 2013-01-31T12:07:26.593 に答える
-1

状態がある場合は、使用せず、静的からアクセスできないことを確認してください。

于 2013-01-31T12:07:46.943 に答える