4

いくつかのブログで、シングルトンは高い結合を引き起こし、その代わりにモックを置き換えることができないため、テストを妨げることを読みました。そのため、解決策はインターフェースを実装し、それを引数で渡すことです。ブログへのリンクはありません。見つけ次第添付します。しかし、方法により、それは不可能です。static getInstance()

シングルトン パターンでインターフェイスを実装する利点はありますか?

public interface SingletonInterface{

   //some methods
}

public class Singleton1 implements SingletonInterface{

   //Usual singleton methods 
}
4

1 に答える 1

7

しかし、静的な getInstance() メソッドのため、これは不可能です。

いいえ、まったく逆です。ポイントは、非常に限られた量のコードだけがシングルトンであることを知る必要があるということです。他のコードはインターフェイスを使用するだけでよく、テスト用にさまざまな実装を使用できます。また、本番環境の実装を後でシングルトンにならないように変更することもできます。まったく変更する必要はありません。

public void foo(SingletonInterface x) {
    // This code doesn't know it's a singleton. You can create fakes for testing.
}

...

// This code *does* know it's a singleton. Boo! Gradually refactor away...
foo(Singleton1.getInstance());
于 2013-08-01T08:00:29.990 に答える