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

前提摘要:

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


        }
    }
}
运行:



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

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值