命令模式-坦克大战-c#

概要

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

类图

命令模式

运行

代码 

using System;

namespace 命令模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Client client = new Client();
            client.main();
            Console.ReadLine();
        }
    }
    // 抽象层
    class InvokerTank
    {
        ICommand scmd;
        ICommand rcmd;
        public InvokerTank(ICommand scmd,ICommand rcmd)
        {
            this.scmd = scmd;
            this.rcmd = rcmd;
        }
        public void sort()
        {
            this.scmd.execute();
        }
        public void run()
        {
            this.rcmd.execute();
        }
    }
    interface ICommand
    {
        void execute();
    }
    class Receiver
    {
        public void sort()
        {
            Console.WriteLine("sort");
        }
        public void run()
        {
            Console.WriteLine("run");
        }
    }
    // 实现层
    class SortCommand : ICommand
    {
        Receiver receiver;

        public SortCommand(Receiver receiver)
        {
            this.receiver = receiver;
        }
        public void execute()
        {
            this.receiver.sort();
        }
    }
    class RunCommand : ICommand
    {
        Receiver receiver;
        public RunCommand(Receiver receiver)
        {
            this.receiver = receiver;
        }
        public void execute()
        {
            this.receiver.run();
        }
    }
    class Client
    {
        public void main()
        {
            Receiver receiver = new Receiver();
            SortCommand sortCommand = new SortCommand(receiver);
            RunCommand runCommand = new RunCommand(receiver);
            InvokerTank tank = new InvokerTank(sortCommand, runCommand);
            tank.sort();
            tank.run();
        }
    }

}

代码优化

优化方向:消除冗余

1.加深了抽象,把请求和服务都做了一个接口抽象,因为是同步请求,说以请求和响应的接口是一样的;

2.命令行提取了一个基类,消除了两个server 成员变量的冗余。

3.添加量一个B70Receiver,增强了comand的可选择范围。

运行效果

代码

using System;

namespace 命令模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Client client = new Client();
            client.main();
            Console.ReadLine();
        }
    }
    // 抽象层
    interface IFunctions
    {
        void sort();
        void run();
    }
    interface ICommand
    {
        void execute();
    }
    // 实现层
    class InvokerTank: IFunctions
    {
        ICommand scmd;
        ICommand rcmd;
        public InvokerTank(ICommand scmd, ICommand rcmd)
        {
            this.scmd = scmd;
            this.rcmd = rcmd;
        }
        public void sort()
        {
            this.scmd.execute();
        }
        public void run()
        {
            this.rcmd.execute();
        }
    }
    class Receiver: IFunctions
    {
        public virtual void sort()
        {
            Console.WriteLine("sort");
        }
        public virtual void run()
        {
            Console.WriteLine("run");
        }
    }
    class B70Receiver: Receiver
    {
        public override void sort()
        {
            Console.WriteLine("sort:70");
        }
    }
    abstract class Command : ICommand
    {
        protected Receiver receiver;
        protected Command(Receiver receiver)
        {
            this.receiver = receiver;
        }
        public abstract void execute();
    }
    class SortCommand : Command
    {
        public SortCommand(Receiver receiver):base(receiver){}
        public override void execute()
        {
            this.receiver.sort();
        }
    }
    class RunCommand : Command
    {
        public RunCommand(Receiver receiver):base(receiver){}
        public override void execute()
        {
            this.receiver.run();
        }
    }
    class Client
    {
        public void main()
        {
            Receiver receiver = new Receiver();
            B70Receiver b70Receiver = new B70Receiver();
            SortCommand sortCommand = new SortCommand(b70Receiver);
            RunCommand runCommand = new RunCommand(receiver);
            InvokerTank tank = new InvokerTank(sortCommand, runCommand);
            tank.sort();
            tank.run();
        }
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值