'디자인 패턴! 이렇게 활용한다' 를 읽고...
5장. 대행 함수를 통한 객체 생성 문제

 
느낀점:
시스템 프로그램을 개발하는 경우에
생성 패턴을 사용해야 하는 경우가 있을까?


팩토리 메서드 패턴이 유용한 경우:
. 구체적으로 어떤 클래스의 객체를 생성해야 할지 미리 알지 못할 경우
. 하위 클래스가 객체를 생성하기를 원할 때
. 하위 클래스들에게 개별 객체의 생성 책임을 분산시켜 객체의 종류별로 객체 생성과 관련된 부분을 국지화 시킬 때


예제코드:
이 예제의 핵심은 Application class 이다.
요점은 가상함수를 이용해서 객체를 생성하고 사용하는 것이다.
객체의 생성은 하위 클래스에게 맡기고, 행위에만 집중할 경우에 사용하면 좋을 것 같다.


#include <iostream>

class Document
{
public:
    virtual void Open(const char* pFileName) = 0;
};

class HwpDocument : public Document
{
public:
    void Open(const char* pFileName)
    {
        std::cout << pFileName << " file is opened." << std::endl;
        std::cout << "Decode HWP format to the plane text" << std::endl;
    }
};

class MsWordDocument : public Document
{
public:
    void Open(const char* pFileName)
    {
        std::cout << pFileName << " file is opened." << std::endl;
        std::cout << "Decode MS-Word format to the plane text" << std::endl;
    }
};

class Application
{
public:
    Document* NewDocument(const char* pFileName)
    {
        Document *pDoc = CreateDocument();
        pDoc->Open(pFileName);
        return pDoc;
    }
protected:
    virtual Document* CreateDocument() = 0;
};

class HwpApplication : public Application
{
protected:
    Document* CreateDocument()
    {
        return new HwpDocument();
    }
};

class MsWordApplication : public Application
{
protected:
    Document* CreateDocument()
    {
        return new MsWordDocument();
    }
};


int main()
{
    Application *app1 = new HwpApplication;
    app1->NewDocument("New.hwp");

    Application *app2 = new MsWordApplication;
    app2->NewDocument("New.doc");

    return 0;
}


Output:
1
2
3
4
New.hwp file is opened.
Decode HWP format to the plane text
New.doc file is opened.
Decode MS-Word format to the plane text
 

+ Recent posts