ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. Abstract Factory pattern
Abstract Factory pattern Àº Factory pattern¸¦ Ãß»óÈ ½ÃŲ ÆÐÅÏÀÌ´Ù. Áï ±¸Ã¼ÀûÀΠŬ·¡½ºÀÇ Á¤ÀǸ¦ ÇÏÁö ¾Ê°í, ÀÎÅÍÆäÀ̽º¸¸ Á¦°øÇÏ°Ô ÇÔÀ¸·Î½á ½ÇÁ¦ ±¸ÇöÀº »ó¼ÓµÈ Ŭ·¡½º¸¦ ÅëÇØ¼ ÀÌ·ç¾îÁö°Ô ÇÑ´Ù.
Ãß»óÈ ½ÃŰ´Â ÀÌÀ¯´Â concrete CreateÀÇ Á¾·ù°¡ ¸¹¾ÆÁö°Ô µÉ °æ¿ì ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÄÚµå ¼öÁ¤ÀÌ ºÒ°¡ÇÇÇØ Áú ¼ö ÀÖ´Ù´Â Factory patternÀÇ ´ÜÁ¡À» º¸¿ÏÇϱâ À§ÇÔÀÌ´Ù. ±¸Á¶![]() ¿¹Á¦ 1#include <iostream>
using namespace std;
#define DEFAULT 0
#define GET 1
#define PUT 2
/* Interface */
class Handler
{
public:
virtual void execute(char *instr)=0;
virtual int getID()=0;
};
/* Factory Class */
class HandlerFactory
{
public:
Handler *instance(){}
};
class GetHandler : public Handler
{
public :
void execute(char *str)
{
cout << "Get Handler : " << str << endl;
}
int getID(){return GET;}
};
class PutHandler : public Handler
{
public :
void execute(char *str)
{
cout << "Put Handler : " << str << endl;
}
int getID(){return PUT;}
};
class DefaultHandler : public Handler
{
public :
void execute(char *str)
{
cout << "DefaultHandler : " << str << endl;
}
int getID(){return DEFAULT;}
};
class GetDataHandler : public HandlerFactory
{
public :
Handler * instance(int type)
{
if (type == GET)
return new GetHandler;
if (type == PUT)
return new PutHandler;
return new DefaultHandler;
}
};
int main()
{
GetDataHandler *dh = new GetDataHandler;
Handler *mh = dh->instance(PUT);
mh->execute((char *)"ok");
cout << "ID : " << mh->getID() << endl;
}
¿¹Á¦ 2#include <iostream>
using namespace std;
class Lock
{
public:
virtual void lock()=0;
virtual void unlock()=0;
};
class LockFactory
{
public:
Lock *getInstance(int type);
};
class FileLock : public Lock
{
public:
void lock(){cout << "File Record LOCK " << endl;}
void unlock(){cout << "File Record UN Lock " << endl;}
};
class MutexLock : public Lock
{
public:
void lock(){cout << "Mutex LOCK " << endl;}
void unlock(){cout << "Mutex UN Lock " << endl;}
};
class DefaultLock : public Lock
{
public:
void lock(){cout << "LOCK " << endl;}
void unlock(){cout << "UN Lock " << endl;}
};
class GetLockHandler : public LockFactory
{
public:
Lock *gethandler(int type)
{
if (type == 1)
{
return new MutexLock;
}
if (type == 2)
{
return new FileLock;
}
return new DefaultLock;
}
};
int main(int argc, char ** argv)
{
GetLockHandler *LockHandler = new GetLockHandler;
Lock *myLock = LockHandler->gethandler(2);
myLock->lock();
myLock->unlock();
return 0;
}
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|