Design&Art

C++博客 首页 新随笔 联系 聚合 管理
  26 Posts :: 0 Stories :: 38 Comments :: 0 Trackbacks
Command模式的目的是为了使命令请求方与命令的执行方解耦合。
因解耦合可得到的好处是:1. 增加新的具体命令不影响其他的类;2. 可以把多个命令聚合在一起组成命令队列。
Command模式的缺点:使用命令模式会导致某些系统有过多的具体命令类。

// Command.cpp : Defines the entry point for the console application.
//

#include 
"stdafx.h"
#include 
<iostream>

using namespace std;

// 命令接口
class Command
{
public:
    
virtual void execute()=0;
}
;

// 调用者
class Invoker
{
public:
    Invoker(Command
* command)
    
{
        
this->command = command;
    }

    
void action()
    
{
        command
->execute();
    }

private:
    Command
* command;
}
;

// 接收者
class Receiver
{
public:
    Receiver()
    
{
    }

    
void action()
    
{
        cout
<<"Action has been taken."<<endl;
    }

}
;

// 具体的命令
class ConcreteCommand: public Command
{
public:
    ConcreteCommand(Receiver
* receiver)
    
{
        
this->receiver = receiver;
    }

    
void execute()
    
{
        receiver
->action();
    }

private:
    Receiver
* receiver;
}
;

// 客户
int main(int argc, char* argv[])
{
    
// 客户要告知命令发给谁?
    Receiver* receiver = new Receiver();

    
// 客户要告知命令是什么?
    Command* command = new ConcreteCommand(receiver);

    
// 客户把命令给调用者
    Invoker* invoker = new Invoker(command);

    
// 调用者通过Command接口把命令交给接收者执行
    invoker->action();

    
return 0;
}




与其他模式的关系:
1. Command与Composite
Composite可以用来组合多个具体命令
2. Command与Memento
如果命令需要撤销(undo)和恢复(redo)功能,备忘录模式可以用来存储关于命令的效果状态信息。
3. Command与Prototype
如果命令类有clone()方法,命令就可以被复制。
posted on 2007-05-21 23:32 安帛伟 阅读(555) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理