Programming/Design Pattern

Template Method & Factory Method Pattern

군자동꽃미남 2015. 1. 15. 20:27

#include <iostream>

#include <stdio.h>


class cComputer // abstract class (추상클래스)

{

public:

enum{

NOTEBOOK = 1,

DESCTOP

};


virtual void getCategory() = 0;

};



class cNotebookComputer : public cComputer

{

public:

void getCategory()

{

printf("Notebook Compuer\n");

}

};



class cDesctopComputer : public cComputer

{

public:

void getCategory()

{

printf("Desctop Computer\n");

}

};



class cComputerManager                                                    // Factory Method

{

public:

static cComputer* getInstance( int _category )

{

cComputer *computer = NULL;


if( _category == computer->NOTEBOOK )

computer = new cNotebookComputer();

else if ( _category == computer->DESCTOP )

computer = new cDesctopComputer();


return computer;

}

};


void main()

{

cComputer *computer;

int input = NULL;


printf("1. Notebook Computer\n2. Desctop Compuer\n");

scanf("%d", &input);


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

Template Method Pattern

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

if( input == 1 )

computer = new cNotebookComputer();

else if( input == 2 )

computer = new cDesctopComputer();


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

Factory Method Pattern

=> Factory Method : 객체를 생성하는 역할을 하는 메소드

이제부터 이 메소드를 호출하는 것으로 객체를 생성할 수 있으며, 만일 추가적인 객체가 발생한다면

해당 메소드를 수정하는 것으로 작업이 끝남. (ex)TabletComputer의 추가

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

computer = cComputerManager::getInstance(input);


computer->getCategory();


delete computer;

}