2017-11-17 7 views
1

シングルトンは有用で人気があると聞きましたが、実際はオープンソースプロジェクトにはほとんど見られません。なぜ人々はシングルトンの代わりに次のパターンを使用するのですか

代わりに、静的メソッドを使用する人が常にいます。

次1は一例であり link

public final class IoUtils { 

private IoUtils() { 
    } 

public static boolean copyStream(InputStream is, OutputStream os, CopyListener 
...... 
} 

} 

Singletonパターンは、単に「インスタンスを1つだけ持っており、それへのアクセスのグローバルポイントを提供するクラスを定義する」と述べています。

私はUtilsクラスは他のすべてのクラスが共有するためシングルトンを使用するのに適していると思います。

しかし、なぜ人々は神経を使用していますか?

+0

静的なクラス/メソッドで動作を実装することは、どのOOPの人にとっても望ましいとは思いません。それはテスト可能ではないためです。 静的クラスを使いやすくするには、クラスインタフェースを実装する基底クラスを用意し、静的メソッドの呼び出しを基になる非静的クラスの対応するメソッドにリダイレクトする方がよいでしょう。非静的クラスはシングルトンでもよいし、静的クラスには非静的クラス型の非公開メンバーを持たせることもできる –

答えて

1

シングルトン単一のオブジェクトがインスタンス化される必要があり、すべての要求されたオブジェクトアクセスがこの特定のインスタンスを通過する場合、デザインパターンが使用されます。このオブジェクトは、必要に応じて状態を維持することができます。 このタイプのオブジェクトは、状態を維持する必要があるため、ロガー、印刷などの機能に必要です。

スタティックユーティリティクラスは、単にステートレスユーティリティ関数である場合に使用します。それは状態を維持しません。オブジェクトのインスタンスはインスタンス化されません。

関連する問題