본문 바로가기
카테고리 없음

팩토리 패턴 Ex

by ByteBridge 2013. 3. 19.
반응형

/************************************************************************/

/* 윈도우 운영체제에서 문서 파일을 실행시킬때

문서 파일 이름의 확장자에 따라 적절한 응용프로그램이 실행됨

응용프로그램은 문서 파일을 열어 그 내용을 화면 상에 보여줌

Ex: 파일이름의 확장자가 hwp 이면 한글이 실행

doc 이면 ms word 가 , zip 이면 알집같은 압축프로그램이 실행됨

이러한 동작과정을 객체지향 관점에서 보면 두가지 종류의 객체가 생성되어야 함을 알수있음

그 하나가 응용프로그램객체이고, 다른 하나는 더블 클릭된 문서 파일에 대한 객체이다.

*/

/************************************************************************/

#include <iostream>

#include <fstream>

#include <string> // 

#include <map>

using namespace std;


class Document {

  public :

    virtual bool Open(char* pFileName) = 0;

};


class HwpDocument : public Document {

  public :

    bool Open(char* pFileName) {

      ifstream ifs(pFileName);

      if (!ifs)

        return false;

      // -- HWP 고유 프로세싱

      return true;

    }

};


class MsWordDocument : public Document {

  public :

    bool Open(char* pFileName) {

      ifstream ifs(pFileName);

      if (!ifs)

        return false;

      // -- MS-Word 고유 프로세싱

      return true;

    }

};


class Application {

  public :

    void NewDocument(char* pFileName) {

      Document *pDoc = CreateDocument();

      docs_[pFileName] = pDoc;

      pDoc->Open(pFileName);

    }


    virtual Document* CreateDocument() = 0;


  private :

    map<string, Document *> docs_;

};


class HwpApplication : public Application {

  public :

    Document* CreateDocument() {

      return new HwpDocument;

    }

};


class MsWordApplication : public Application {

  public :

    Document* CreateDocument() {

      return new MsWordDocument;

    }

};


void main()

{

  HwpApplication hwp;

  hwp.NewDocument("input.hwp");

}

/*******

NewDocument() 함수는 Application 클래스에서만 정의 됨

다른 클래스에서는 더이상 정의 되지않는다.

반면 CreateDocument() 멤버 함수는 Application 클래스에서는 완전 가상 함수 로 정의 하였지만

그 하위의 HwpApplication 및 MsWordApplication 클래스에서는 이를 실제로 구현함


*/

반응형