static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("以下為尚未符合 開放封閉原則 的程式");
            Console.WriteLine("雷神索爾的攻擊武器有兩種,一種是使用雷神之槌作攻擊,如下範例。\n");
            Console.ForegroundColor = ConsoleColor.White;

            var thorWithMjolnir = new Thor();

            thorWithMjolnir.Attack();

            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("但如果要讓他更換武器作攻擊,就必須改寫類別的攻擊方法如下範例。\n");
            Console.ForegroundColor = ConsoleColor.White;

            var thorWithStormbreaker = new Thor();

            thorWithStormbreaker.Attack();

            Console.WriteLine("\n==========================我是分隔線==========================\n");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("可以看到因為更動原本的方法,導致索爾的武器被限制住了,");
            Console.WriteLine("這樣違反了開放封閉原則,新功能不應該是由修改舊方法而產生的,");
            Console.WriteLine("因此新增一個類別,去複寫原本的攻擊方法來做新功能的開發,");
            Console.WriteLine("從而讓程式符合開放封閉原則。\n");
            Console.WriteLine("擴充方法後,使用這就可以任意指定要使用的武器了。\n");
            Console.ForegroundColor = ConsoleColor.White;

            // 使用者輸入武器選項,顯示結果
            string opt = string.Empty;

            while (true)
            {
                opt = Choice();
                if (opt == "1" || opt == "2")
                {
                    var thor = GetThor(opt);
                    Console.Write("訊息:\n");
                    thor.Attack();
                    Console.WriteLine("========================執行成功========================\n");
                }
                else
                {
                    Console.WriteLine("========================範例結束請按任意鍵========================\n");
                    Console.Read();
                    return;
                }
            }
        }
Esempio n. 2
0
 public void Attack()
 {
     thor.Attack(eWeapon);
 }