【设计模式】——日本队的简单工厂模式

前提摘要:

世界杯正在如火如荼的进行,代表亚洲出战的日本队在昨天凌晨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();


        }
    }
}
运行:



要是扎切罗尼比赛前能运行一下这几行代码,没准还能赢一场呢,哈哈!(伪球迷说话是不用负责任滴)

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