2012-03-26 13 views
5

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

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

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

ご存知ですか、 私は何か間違っていますか? シングルトンを継承するのは間違っているか、避けるべきですか?

答えて

4

は、それが単に静的機能を追加するサブクラスする必要はありません(アンチパターンとしてそれを記述する思考の学校があります)。

  • Javaでヘルパークラスを使用します
  • C#で拡張クラスを使用します
  • C++の名前空間で囲まれた自立機能を使用してください:ここで私はシングルトンをサブクラス化することを好む言語固有のアプローチがあります
  • のObjective-C
+0

私はC++言語を使用しています。私はシングルトンLoggerクラスから継承しない静的メソッドのみのラッパークラスを作成することを考えています。どうですか?? そして、上記のC++の方法について詳しく説明してください。 ありがとうございます。 – EngineeredBrain

+0

@AnwarShaikhこれも機能します。フリースタンディング機能が利用できないため、これはJavaで行います。私はC++でそのルートをやっていますが、追加している関数の中で状態やその他の実装の詳細を共有する必要がある場合に限ります。 – dasblinkenlight

+0

ありがとうございました!私はその上にラッパーを書くことによって試みます。 – EngineeredBrain

0

シングルトンに非シングルトンとデリゲートコールを使用して、必要に応じてシングルトンを呼び出します。シングルトンを取り除く機会があるときはいつでも、それを求めてください。

+0

はい、シングルトンを避ける必要がありますが、Loggerのようなものに使用すると良いと判明しています。 シングルトンにあるものと一緒にいくつかの追加メソッドが必要な場合は、内部的にシングルトンを使用するシングルトンを上回るラッパー(静的メソッドのみのクラス)を継承するか、書き込むべきですか? – EngineeredBrain

+0

ラッパーに行く。それは私が「デリゲートコール」の意味です。 –

0

私はGarret Hallに同意しますが、もし可能ならSingletonを避けるべきです。それは、私が1つの理由で間違っているとは思わないと言いました。シングルトンを実装した人は、あなたがそれを拡張できるようにします。 APIの開発者がシングルトンクラスのLoggerを拡張したくない場合、C++やコンストラクタをprivateにしたり、使用している言語に適したメソッドを作成したりします。脇シングルトンパターンのメリットを残し

0

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

また、シングルトンで使用できるすべての関数を使用することを制限しています。

いいアイデア!!!

関連する問題