singletonとstatic classの使い分け方

転職しました。
久しぶりに実装しています。

iPhoneAndroidに絡めそうなのでわくわくしてますww

引き継ぎという形ですが、実相はやっぱり楽しい!!
さて、自分以外の人間が書いたコードを見ると、違和感が少なからずありますよね?

今回のタイトルもそういう違和感が元です。

さて、singletonとstatic class。
両者の使いどころ、違いを吟味せずに使用している方は多いのではないでしょうか?
平平凡凡なプログラマーである私もその一人ですw

Twitterでちょっとつぶやいてみたところ、

staticで宣言すると下記のようなメリットがあるようです。
1. メモリ量節約
・ゲーム屋さんと私との、そもそもstaticという宣言の使い方の違いが顕著に表れています。

2. そのクラスのstaticなものにしかアクセスさせない
・使用制限という意味では、C#のprivate set;見たいな、スコープ範囲制限みたいな使い方ですね。staticメソッドからは、staticなものにしか触れないので一種の制約見たいなもんですね。

3. メンバ変数をいじらない保証として宣言する
・これも2.と一緒のような気がします。

個人的に過去にsingletonを使用した時は、親Formを一つしか生成したくないときとか、ユーティリティクラスをsingletonでインスタンス提供したりとかぐらいです。

class、methodを全てstaticで宣言しているコードを見たことがありますが、やはりいざ実行してみると重いですし、どこでプロパティが変更されるか分からないので、客観的に見ても恐ろしかったです。

プロパティを持たずに、あくまでメソッドのみstaticで提供するのであれば、ありっちゃありのような気がします。

ただ、インスタンスの個数を制限したいとか、保証したいって時はsingletonパターンを使用します。

みなさんはこのsingletonとstatic classどう使い分けてますか?