Observer_Pattern - 8BitsCoding/RobotMentor GitHub Wiki

์ •์˜

ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ทธ ๊ฐ์ฒด์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค ๋ชจ๋‘์—๊ฒŒ ์—ฐ๋ฝ์ด ๊ฐ€๊ณ  ์ž๋™์œผ๋กœ ๋‚ด์šฉ์ด ๊ฐฑ์‹ ๋˜๋Š” ํŒจํ„ด

์ผ๋ฐฉ์  ํ†ต์ง€(Broadcast) ๋ฐฉ์‹์˜ ํŒจํ„ด


์ด๋ฏธ์ง€

int main() {
    ๋ฐฉ์†ก์‚ฌ_์ธํ„ฐํŽ˜์ดํŠธ* pSubject = new ์ฝ”๋ฆฌ์•„๋ฐฉ์†ก;

    ์˜ต์ €๋ฒ„_์ธํ„ฐํŽ˜์ด์Šค* pObserver1 = new ์‹œ์ฒญ์ž("ํ™๊ธธ๋™");
    ์˜ต์ €๋ฒ„_์ธํ„ฐํŽ˜์ด์Šค* pObserver2 = new ์‹œ์ฒญ์ž("ํƒœํ‰์–‘");
    ์˜ต์ €๋ฒ„_์ธํ„ฐํŽ˜์ด์Šค* pObserver3 = new ์‹œ์ฒญ์ž("๋น„๋‘˜๊ธฐ");

    pSubject->๋ฐฉ์†ก์‹œ์ฒญ๋“ฑ๋ก(pObserver1);
    pSubject->๋ฐฉ์†ก์‹œ์ฒญ๋“ฑ๋ก(pObserver2);
    pSubject->๋ฐฉ์†ก์‹œ์ฒญ๋“ฑ๋ก(pObserver3);

    pSubject->๋‰ด์Šค("๋‚ ์”จ๋ฅผ ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.");

    pSubject->๋ฐฉ์†ก์‹œ์ฒญํ•ด์ œ(pObserver1);
    pSubject->๋ฐฉ์†ก์‹œ์ฒญํ•ด์ œ(pObserver2);

    delete pSubject;
    delete pObserver1;
    delete pObserver2;
    delete pObserver3;
    
    return 0;
}
class ์˜ต์ €๋ฒ„_์ธํ„ฐํŽ˜์ด์Šค {
public:
    virtual void ๋ฐฉ์†ก์‹œ์ฒญ(const TCHAR* new) = 0;
    virtual const TCHAR* ์ด๋ฆ„() const = 0;
};

class ์‹œ์ฒญ์ž : public ์˜ต์ €๋ฒ„_์ธํ„ฐํŽ˜์ดํŠธ {
public:
    ์‹œ์ฒญ์ž(const TCHAR* name) : mName(name) {}

     ๋ฐฉ์†ก์‹œ์ฒญ(const TCHAR* news) override { cout << mName << " : " << news << endl; }
    const TCHAR* ์ด๋ฆ„() const { return mName.c_str(); }
private:
    tsring mName;
};
class ๋ฐฉ์†ก์‚ฌ_์ธํ„ฐํŽ˜์ด์Šค
{
public:
    void ๋ฐฉ์†ก์‹œ์ฒญ๋“ฑ๋ก(์˜ต์ €๋ฒ„_์ธํ„ฐํŽ˜์ด์Šค* o) { mList.AddTail(o); cout << "๋ฐฉ์†ก ์‹ ์ฒญ : " << o->์ด๋ฆ„() << endl; }
    void ๋ฐฉ์†ก์‹œ์ฒญํ•ด์ œ(์˜ต์ €๋ฒ„_์ธํ„ฐํŽ˜์ด์Šค* o) { mList.RemoveAt(mList.Find(o));  cout << "๋ฐฉ์†ก ํ•ด์ง€ : " << o->์ด๋ฆ„() << endl; }
 
protected:
    void ์†ก์ถœ(const TCHAR* news)
    {
        POSITION pos = mList.GetHeadPosition();
        while (pos != NULL)
            mList.GetNext(pos)->๋ฐฉ์†ก์‹œ์ฒญ(news);
    }
 
public:
    virtual void ๋‰ด์Šค(const TCHAR* news) = 0;
 
private:
    CAtlList<์˜ต์ €๋ฒ„_์ธํ„ฐํŽ˜์ด์Šค*> mList;
};
class ์ฝ”๋ฆฌ์•„๋ฐฉ์†ก : public ๋ฐฉ์†ก์‚ฌ_์ธํ„ฐํŽ˜์ด์Šค
{
public:
    void ๋‰ด์Šค(const TCHAR* news) override { ์†ก์ถœ(news); }
};

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

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

โš ๏ธ **GitHub.com Fallback** โš ๏ธ