Command_Pattern - 8BitsCoding/RobotMentor GitHub Wiki
์ ์
์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฒด์ ํํ๋ก ์บก์ํํ๋ ๋ชฉ์ ์ ํจํด
ํน์ ํ ์ผ์ ํ๋ ๊ธฐ๋ฅ๋ค์ ๋ฐ๋ก๋ฐ๋ก ๊ฐ์ฒดํ ํ์ฌ ์์ฒญ์ ์ข ๋ฅ์๋ ๋ฌด๊ดํ๊ฒ ํ๋ก๊ทธ๋จ ์์ฑ์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ค๋ค.
์์๋ก ์ค๋ช

int _tmain(int argc, _TCHAR* argv[])
{
// ํ๊ณ ์ถ์ ๊ฒ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ถ๋ถ๊ณผ ์คํํ๋ ๋ถ๋ถ์ ๋๋๊ณ ์ถ์ดํ๋ค.
์ฒ๋ฆฌ์ pInvoker;
ํ์ผ์์ฑ pFileNew;
ํ์ผ์์ฑ๋ช
๋ น pCommand;
pCommand.๋ฆฌ์๋ฒ์ค์ (&pFileNew);
pInvoker.๋ช
๋ น์ง์ (&pCommand);
pInvoker.๋ช
๋ น์คํ();
return 0;
}
// ์ฒ๋ฆฌ์ ํด๋์ค
class ์ฒ๋ฆฌ์
{
public:
void ๋ช
๋ น์ง์ (Command* pCmd) { pCommand = pCmd; }
void ๋ช
๋ น์คํ() { pCommand->์คํ(); }
private:
Command* pCommand;
};
// Command ์ธํฐํ์ด์ค
class Command
{
public:
virtual void ์คํ() = 0;
};
// ํ์ผ ์์ฑ ๋ช
๋ น ํด๋์ค
class ํ์ผ์์ฑ๋ช
๋ น : public Command
{
public:
void ๋ฆฌ์๋ฒ์ค์ (Receiver* r) { pReceiver = r; }
void ์คํ() { pReceiver->์คํ(); }
private:
Receiver* pReceiver;
};
//------------------------------------------------------------------
// ํ์ผ ์ ์ฅ ๋ช
๋ น ํด๋์ค
class ํ์ผ์ ์ฅ๋ช
๋ น : public Command
{
public:
void ๋ฆฌ์๋ฒ์ค์ (Receiver* r) { pReceiver = r; }
void ์คํ() { pReceiver->์คํ(); }
private:
Receiver* pReceiver;
};
//------------------------------------------------------------------
// ํ์ผ ๋ซ๊ธฐ ๋ช
๋ น ํด๋์ค
class ํ์ผ๋ซ๊ธฐ๋ช
๋ น : public Command
{
public:
void ๋ฆฌ์๋ฒ์ค์ (Receiver* r) { pReceiver = r; }
void ์คํ() { pReceiver->์คํ(); }
private:
Receiver* pReceiver;
};
// Receiver ์ธํฐํ์ด์ค
class Receiver
{
public:
virtual void ์คํ() = 0;
};
//------------------------------------------------------------------
// ํ์ผ์์ฑ ํด๋์ค
class ํ์ผ์์ฑ : public Receiver
{
public:
virtual void ์คํ() override { cout << "ํ์ผ ์์ฑ" << endl; }
};
//------------------------------------------------------------------
// ํ์ผ์ ์ฅ ํด๋์ค
class ํ์ผ์ ์ฅ : public Receiver
{
public:
virtual void ์คํ() override { cout << "ํ์ผ ์ ์ฅ" << endl; }
};
//------------------------------------------------------------------
// ํ์ผ๋ซ๊ธฐ ํด๋์ค
class ํ์ผ๋ซ๊ธฐ : public Receiver
{
public:
virtual void ์คํ() override { cout << "ํ์ผ ๋ซ๊ธฐ" << endl; }
};