読みづらさに漬け込まれる。というのがCWE1108「グローバル変数への過度の依存の意見」だ。同じ趣旨で1126「不必要に広い範囲の変数の宣言」というのもある
非局在的な性質=依存度
静的フィールドも「好ましくない」と?
Finalとかしなかった例
non-transitivity(非遷移性)
public class FunctionTable {
public static FuncLoader m_functions;
}
本当にあった怖い話。「public staticをfinal宣言しないでクラス公開すると、公開した型によっては外部から乗っ取られるコード書かれるかもよ?大丈夫?」ということらしい。CWEにもあった
class DataSerializer implements Serializable {
public static long serialVersionUID = 1973473122623778747L;
}
Singletonは前向きにオブジェクト社会にコミットしている。
en:Initialization-on-demand holder idiom オンデマンドの初期化ホルダーイディオム
IoDhI =イニシャライズドオンデマンドホルダーイディオム
final class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
(Singleton パターンは)扱い次第では、グローバル変数のように機能させることもできる。
推奨している感じがかっこいい。グローバルだからといって禁止ばかりされると萎える。これでは委譲でなく萎譲(萎縮して譲り渡すの意味)である。
萎えてのち方針を譲り渡す、嗚呼、萎譲。。
これはシングル的なシングルにならないかもしれないが、ファクトリーメソッドがおそらくこういう使い方で何かできてる気がする、flyweightと組み合わせることもできるかもしれない。デザインパターン全般にいえるが、その機構から、生成時にメソッドを挟むことが多いから、生成数の制限がしやすい。どっちかっていうと、そっちが本質なんじゃないかとも思える。が、趣味でやってる限りスコープ気にすることはまずない。