5

最近、興味深いパターンを持つ 10 年前のコード ベースを継承しました。その中には、インスタンス メソッド内の静的変数があります。クラスの単一のインスタンスのみがインスタンス化され、インスタンス メソッドにこれらの静的変数が存在することを正当化する理由がほとんど見つかりません。

  1. 静的変数を使用してインスタンス メソッドを設計したことがありますか? そして、あなたの理論的根拠は何ですか?

  2. このパターンが悪いと考えられる場合、それを修正する方法は?

注: この質問は、インスタンス メソッドの静的変数には関係ありません。

編集:

いくつかの読書:

  1. 静的クラスとシングルトン
  2. http://objectmentor.com/resources/articles/SingletonAndMonostate.pdf
  3. http://www.semantics.org/once_weakly/w01_expanding_monostate.pdf
4

3 に答える 3

4
  1. これは、 Scott Meyers C ++の本の1つで説明されている、シングルトンパターンの古典的なC++実装です。
  2. シングルトンは物議を醸すパターンであるため、シングルトンが良いか悪いかについて業界全体のコンセンサスはありません。

シングルトンの代わりに、純粋に静的なオブジェクトがあります。この質問には良い議論があります。

于 2012-08-10T02:46:47.363 に答える
2

インスタンス化可能なクラスで静的フィールドを使用したのは、定数としてだけでした。

一般的に言えば、クラスを完全に静的にするか、完全にインスタンス化できるようにする必要があります (おそらく、静的に保持したい定数を除いて)。シングルトン クラスでは、ほとんど同じように動作します。2 つの手法を混在させることの危険性は、クラスをシングルトンではなくすることにした場合、マルチインスタンス化されたクラスで奇妙な動作に遭遇する可能性があることです。

于 2012-08-10T02:51:31.297 に答える
2

スコープが限定された一種のグローバル変数として機能できるため、静的変数を持つことは手続き型関数で役立ちます。

メソッドでこのようなことを行う唯一の理由は、他の目的を果たさないメンバー変数を宣言することなく、多くの呼び出しで変数を永続化することです。正直なところ、これは怠惰なプログラミングであり、避けるべきだと思います。

于 2012-08-10T03:38:39.173 に答える