#pragma once
#ifndef COMMAND_H
#define COMMAND_H
class Command
{
public:
virtual ~Command() {}
virtual void Execute() = 0;
};
class Receiver
{
public:
void Action();
};
class Invoker
{
public:
Invoker(Command *pCommand);
~Invoker();
void Invoke();
private:
Command *m_pCommand;
};
class ConcreateComand : public Command
{
public:
ConcreateComand(Receiver* pReceiver);
virtual ~ConcreateComand();
virtual void Execute();
private:
Receiver* m_pReceiver;
};
#endif
#include "StdAfx.h"
#include "command_impl.h"
#include <iostream>
void Receiver::Action()
{
std::cout << "Receiver Action\n";
}
Invoker::Invoker(Command *pCommand)
: m_pCommand(pCommand)
{
}
Invoker::~Invoker()
{
delete m_pCommand;
m_pCommand = NULL;
}
void Invoker::Invoke()
{
if (NULL != m_pCommand)
{
m_pCommand->Execute();
}
}
ConcreateComand::ConcreateComand(Receiver* pReceiver)
: m_pReceiver(pReceiver)
{
}
ConcreateComand::~ConcreateComand()
{
delete m_pReceiver;
m_pReceiver = NULL;
}
void ConcreateComand::Execute()
{
if (NULL != m_pReceiver)
{
m_pReceiver->Action();
}
std::cout << "Execute by ConcreateComand\n";
}
#include "stdafx.h"
#include "command_impl.h"
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
Receiver* pReceiver = new Receiver();
Command* pCommand = new ConcreateComand(pReceiver);
Invoker* pInvoker = new Invoker(pCommand);
pInvoker->Invoke();
delete pInvoker;
system("pause");
return 0;
}