C#避免过长的IF和Switch分支的方法

C#避免过长的IF和Switch分支的方法

1.最蠢形态

//很丑有没有!
//这个分支要是一两个还是可以接受的
class Program
{
    static void Main(string[] args)
    {
        Command("播放");
        Console.ReadKey();
    }

    public static void Command(String _command)
    {
        switch(_command)
        {
            case "播放":
                Console.WriteLine("开始"+_command+"了!!");
                break;
            case "快进":
                Console.WriteLine("开始" + _command + "了!!");
                break;
            case "暂停":
                Console.WriteLine("开始" + _command + "了!!");
                break;
            case "结束":
                Console.WriteLine("开始" + _command + "了!!");
                break;
        }
    }
}

2.表驱动形态

//这个表驱动 还可以利用反射去做
//这个比上面的强多了有没有?
class Program
{

    public static Dictionary<string, Action> dic;

    static void Main(string[] args)
    {
        dic = new Dictionary<string, Action> {
                                               {"播放", () => { Console.WriteLine("开始播放了!!"); }},
                                               {"快进", () => { Console.WriteLine("开始快进了!!"); }},
                                               {"暂停", () => { Console.WriteLine("开始暂停了!!");}}
                                             };
        //可以动态的添加命令和方法
        dic.Add("结束", () => { Console.WriteLine("开始结束了!!"); });
        Command(dic, "播放");
        Command(dic, "快进");
        Command(dic, "结束");
        Command(dic, "快进两倍");

        Console.ReadKey();

    }

    static void Command(Dictionary<string, Action> _dic,String _command)
    {
        if (_dic.ContainsKey(_command))
        {
            _dic[_command]();
        }
        else
        {
            Console.WriteLine("没有命令啊!!");
        }
    }
}

3.多态形态

//利用多态来处理
//好处就是再添加命令时候不用修改,直接添加命令类就可以了
class Program
{
    static void Main(string[] args)
    {
        Commander _commander = new PlayCommander();
        _commander.Execute();

        _commander = new FinishCommander();
        _commander.Execute();

        _commander = new SpeedCommander();
        _commander.Execute();

        Console.ReadKey();
    }
}

abstract class Commander 
{
    public abstract void Execute();
}

class PlayCommander : Commander
{
    public override void Execute()
    {
        Console.WriteLine("开始播放了了!!");
    }
}

class SpeedCommander : Commander
{
    public override void Execute()
    {
        Console.WriteLine("开始快进了了!!");
    }
}

class PauseCommander : Commander
{
    public override void Execute()
    {
        Console.WriteLine("开始暂停了了!!");
    }
}

class FinishCommander : Commander
{
    public override void Execute()
    {
        Console.WriteLine("开始结束了了!!");
    }
}

转载于:https://www.cnblogs.com/maskaut/p/4737223.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值