Command_Pattern - 8BitsCoding/RobotMentor GitHub Wiki

์ •์˜

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ์บก์Аํ™”ํ•˜๋Š” ๋ชฉ์ ์˜ ํŒจํ„ด

ํŠน์ •ํ•œ ์ผ์„ ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ๋”ฐ๋กœ๋”ฐ๋กœ ๊ฐ์ฒดํ™” ํ•˜์—ฌ ์š”์ฒญ์˜ ์ข…๋ฅ˜์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.


์˜ˆ์‹œ๋กœ ์„ค๋ช…

์ด๋ฏธ์ง€1

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; }
};

์ฐธ๊ณ ์‚ฌ์ดํŠธ