设计模式-命令模式

命令模式

命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

代码:

//声明一个借口command   
public interface command
    {
        void execute();

        void offExecute();
    }

写两个实体类

public class Light
    {
        public void on()
        {
            Console.WriteLine("the light is turn on!");
        }

        public void off()
        {
            Console.WriteLine("the light is turn off!");
        }
    }

    public class door
    {
        public void open()
        {
            Console.WriteLine("the door open");
        }

        public void close()
        {
            Console.WriteLine("the door closed");
        }
    }

实现command接口的控制类

    public class doorCommand:command
    {
        private door door;
        public doorCommand(door door)
        {
            this.door = door;
        }

        public  void execute()
        {
            door.open();
        }

        public void offExecute()
        {
            door.close();
        }
    }
    public class LightCommad : command
    {
        private Light light;
        public LightCommad(Light light)
        {
            this.light = light;
        }
        public void execute()
        {
            light.on();
        }

        public void offExecute()
        {
            light.off();
        }
    }

实现远程控制类

 public class RemoteControll
    {
        command[] onCommands;
        command[] offCommands;

        public RemoteControll()
        {
            onCommands = new command[7];
            offCommands = new command[7];          
        }

        public void setCommand(int slot,command onCommand,command offCommand)
        {
            onCommands[slot] = onCommand;
            offCommands[slot] = offCommand;
        }

        public void pressButton(int slot)
        {
            if (onCommands[slot] == null)
            {
                Console.WriteLine("无命令可执行!");
            }
            else
            {
                onCommands[slot].execute();
            }
        }

        public void offPressButton(int slot)
        {
            if (offCommands[slot] == null)
            {
                Console.WriteLine("无命令可执行!");
            }
            else
            {
                offCommands[slot].offExecute();
            }
        }
    }

测试

  static void Main(string[] args)
        {
            Light light = new Light();
            LightCommad lightCommad = new LightCommad(light);
            door door1 = new door();
            doorCommand doorCommand1 = new doorCommand(door1);
            RemoteControll remoteControll = new RemoteControll();
            remoteControll.setCommand(2, lightCommad,lightCommad);
            remoteControll.setCommand(4, doorCommand1, doorCommand1);
            remoteControll.pressButton(2);
            remoteControll.offPressButton(3);
            Console.ReadLine();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值