【設計模式】——日本隊的簡單工廠模式

前提摘要:

世界盃正在如火如荼的進行,代表亞洲出戰的日本隊在昨天凌晨1:4敗給哥倫比亞後,以1平2負的戰績小組墊底出局。主帥扎切羅尼在3場比賽中使用了同一種陣型,效果不佳。如果遇到不同的對手換不同的陣型會不會好點呢?日本隊所在的C組四支球隊是:日本隊、哥倫比亞隊、科特迪瓦隊、希臘隊。用什麼陣型呢,世界盃無弱旅,所以最少要用四後衛。第一戰對科特迪瓦隊,第一戰要力爭進球,前場不如派上3個人,所以用四三三陣型。第二站對希臘,歐洲球隊技術細膩,要派上4箇中場,打四四二陣型。最後對哥倫比亞,就用四二三一吧!

即:


結構圖:

使用簡單工廠模式創建對手類,三個對手分別繼承對手類


編寫代碼:

首先創建父類對手類,然後利用面向對象繼承的思想使實際對手繼承父類,重寫虛方法。然後利用簡單工廠模式確定調出哪一個對手的資料。注意封裝代碼的思想,把客戶端和算法的代碼分隔開來。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace japan
{
    class Program
    {
        public class  Opponent//對手類
        {
            public virtual string GetName()
            {
                string name = null;
                return name ;
            }

            public virtual string GetResult()
            {
                string result = null;
                return result;
            }
        }
        
        //球隊類
        class 科特迪瓦:Opponent
        {

            public override string GetName()
            {
                string name = "科特迪瓦";
                return name;
            }

            
            public override string GetResult()
            {
                string result = "使用四三三陣型";
                return result ;
            }
        }
        class 希臘 : Opponent
        {
            public override string GetName()
            {
                string name = "希臘";
                return name;
            }
            public override string GetResult()
            {
                string result = "使用四四二陣型";
                return result;
            }
        }
        class 哥倫比亞 : Opponent
        {
            public override string GetName()
            {
                string name = "哥倫比亞";
                return name;
            }
            public override string GetResult()
            {
                string result = "使用四二三一陣型";
                return result;
            }
        }
         
        public class OpponentFactory
        {
            public static Opponent createOpponent(string opponent)
            {
                Opponent oppo = null;
                switch (opponent)
                {
                    case "2":
                        oppo = new 希臘();
                        break;
                    case "1":
                        oppo = new 科特迪瓦();
                        break;
                    case "3":
                        oppo = new 哥倫比亞();
                        break;
                }
                return oppo;
            }
        }
        static void Main(string[] args)
        {

            
            Console.Write("日本隊小組賽的第幾個對手:");
            string opponent = Console.ReadLine();
            Opponent oppo;
            oppo = OpponentFactory.createOpponent(opponent);
            //oppo.Continent = "歐洲";
            string result = oppo.GetResult();
            string name=oppo .GetName ();
            Console.WriteLine("您的對手爲:"+ name );
            Console.ReadLine();
            Console.WriteLine("建議使用的陣型爲:" + result);
            Console.ReadLine();


        }
    }
}
運行:



要是扎切羅尼比賽前能運行一下這幾行代碼,沒準還能贏一場呢,哈哈!(僞球迷說話是不用負責任滴)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章