0

Aいくつかの例外をgetInstance()スローするシングルトンがあるとします。

Aさらに、それがプログラム全体で使用されていると仮定します。A.getInstance().doSomethingUseful()問題はありませんが、多くのコードがインターフェイスから継承されているため、次のConstantsように宣言します。

A a = A.getInstance()で、すべての人がへのアクセスをConstants実装できるようにします。Constantsa

ただし、予想どおり、Javaメソッドが例外をスローするため、インターフェイスで宣言できないと文句を言います。

それを回避する回避策はありますか?

4

2 に答える 2

3

これは本当に良い考えではないと思います。そのオブジェクトのライフサイクルを、そのインターフェイスを実装するクラスの構造に直接結び付けようとしています。

シングルトンを使用する必要がある場合は、getInstance()メソッドを介して明示的に参照することをお勧めします。比較的直感的です。必要に応じて、インスタンス化例外をランタイムにします。

さらに良いのは、シングルトンパターンがアンチパターンと見なされるという前提を受け入れ、制御の注入などの代替案を検討することです。

于 2012-12-11T16:00:41.133 に答える
1

チェックされた例外をチェックされていない例外に変換するだけです

static A getInstanceA2() throws Error
{
    try
    {   return A.getInstance();   }
    catch(Exception e)
    {   throw new Error(e);   }
}

interface Constants
{
    A a = getInstanceA2();
}

getInstane()失敗すると、インターフェースがConstants壊れ、アプリがクラッシュする可能性があります。

Aとの間に循環依存関係がある場合ContantsA初期化されていない静的フィールドがConstants

于 2012-12-11T16:09:34.113 に答える