5

アプリケーションのロガーを作成しています。サードパーティのロガーライブラリを使用しています。どのロガーがシングルトンとして実装されているか。

静的関数をさらに追加したいので、そのロガークラスを拡張しました。これらの静的関数では、Logger(継承した)のインスタンス(単一)を内部的に使用します。

MyLoggerのインスタンスを作成することも、スーパークラスのgetInstance()メソッドを再実装することもありません。しかし、親クラス(Loggger)のデストラクタにアクセスできないため、MyLoggerのデストラクタを作成できないなどの警告が表示されます。

私は知りたいです、私は何か間違ったことをしていますか?シングルトンの継承は間違っているのでしょうか、それとも避けるべきですか?

4

4 に答える 4

4

シングルトンパターンのメリットはさておき(アンチパターンとして説明する考え方があります) 、静的機能を追加するためにサブクラス化する必要はありません。シングルトンをサブクラス化することを好む言語固有のアプローチは次のとおりです。

  • C++名前空間で囲まれた独立した関数を使用する
  • C#で拡張クラスを使用する
  • Javaでヘルパークラスを使用する
  • Objective-Cでカテゴリを使用する
于 2012-03-26T17:33:20.207 に答える
1

私はギャレットホールに同意します。可能であればシングルトンを避けるべきです。とはいえ、1つの理由でそれが間違っているとは思いません。シングルトンを実装した人はあなたにそれを拡張させました。API開発者がシングルトンクラスのロガーを拡張したくない場合は、コンストラクターをプライベートにします。たとえば、C ++や、使用している言語に適したメソッドを使用します。

于 2012-03-26T17:32:08.197 に答える
1

非シングルトンを使用し、必要に応じてシングルトンへの呼び出しを委任します。シングルトンを取り除く機会があれば、それを実行してください。

于 2012-03-26T17:29:36.593 に答える
0

シングルトンから必要なすべてのメソッドに対してラッパーを記述する必要があるため、クラスにラッパーを記述することは適切な解決策ではないと思います。そして、何十もの関数を書くことになります。

また、シングルトンで利用可能なすべての機能の使用を制限しています。

良い考えではありません!!!

于 2012-03-28T06:29:50.203 に答える