ファクトリメソッド

■クラスのコンストラクタは、なるべくそのクラス自身だけが

 参照できることが望ましい。

 ・メソッドやプロパティも同様だが、無暗に公開すべきではない。

 ・特に引数を持つコンストラクタの場合、色んな場所で色んな引数で

  初期化されることは、メンテナンス性を著しく下げる。

 

■クラス内にインスタンスを返すStaticメソッドを、目的別(引数の種類分)作る

 ・そうすれば、インスタンスがどんな引数で初期化されていても、

  すべてのインスタンス生成ロジックが当該クラスに纏まっている為、

  把握しやすい。

 

    public class Ranking
    {
        private enum  Ranks : int
        {
            GOLD=1, SILVER, BLONDS,NORMAL
        }
        private readonly int _MyRank = 0;
        public int MyRank { get { return _MyRank; } }   
        //引数を持つPrivateなコンストラク
        private Ranking(int createRank)
        {
            _MyRank = createRank;
        }

        /// 以下、目的別にこのクラスを生成するファクトリメソッド群
        // GOLDランカーを生成
        public static Ranking CreateGoldRanker()
        {
            return new Ranking((int)Ranks.GOLD);
        }
        // SILVERランカーを生成
        public static Ranking CreateSilverRanker()
        {
            return new Ranking((int)Ranks.SILVER);
        }
    }