Command设计模式

我的理解Command Pattern
 
设计一个命令的执行者,它负责执行命令,但是它并不知道这个命令是什么,它只负责去执行就好了,而且这个命令也总是会被正确的执行。
 
其实在看了前几页对这个模式的描述,差不多脑海中就已经构思出这个模式的大概实现了。
 
比较生动的2个例子:
 
1. 你去一家餐厅吃饭。当你把菜单点好,服务员会把你的菜单送到厨师那里,厨师会帮你做好你点的菜。就这么简单:其中服务员就相当于是命令的执行者一样,她并不需要你知道你点的是什么,她只要对厨师说(执行命令):把这个菜单上的菜做好!然后过几分钟,你就可以吃到想吃的东西了。
 
2. 设计一个家庭自动遥控系统。你的家里有各式各样的家电设备,你想要用一个遥控器就可以控制所有的这些家电,不用为每一个家电都配上一个遥控器,这样是不是很方便?在这里遥控器就是一个典型的命令执行者,你可以向它发送打开电视机,关掉空调等命令,遥控器接受了命令就执行你想要的命令。
 
下面是一个具体的实现(针对第2个例子)
因为命令的执行者并不知道具体的命令是什么,具体的命令是我们发给它的,这里很自然而然的就应该想到多态的用处了。
interface  Command
{
       
void Excute()
}


 
下面就是我们具体的命令类了,你可以按你的需求设计你想要的命令类。命令的真正执行者可以以参数传递给命令。你需要为每一个Receiver的每一个动作设计一个命令。这里就以一个电视的打开命令为例。

class  TVOnCommand  implements  Command
{
    TV     tv;    
//电视类
 
   TVOnCommand(TV tv)

this.tv = tv;
}


       
void excute()
       
{
             tv.on()

              System.out.println(“tv turn on”);
       }

}


我们的遥控器类:

Class RemoteControl
{
public
       Command       command;
 
       
void       setCommand(Command com)      //接收具体的命令了
 
       This
->command = com;
       }

 
       Void       OnPressButton()   
// 这里遥控器打开按钮并不知道它打开到底的是TV还是Fan 
        {
              Command.excture()
       }

 
}
 

Command模式举例:

线程池: 有一个命令接收队列,一端负载传递命令进去,另一端则有几个线程(由你决定的)从队列中取出命令,并执行这个命令。你的线程可能这次执行的是计算,下次取得执行的命令可能是接收数据。它并不知道这些命令是什么,它只是执行它就可以了。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值