ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. Command Pattern
ÆÐÅϰú ÆÐÅÏ¿¡ ´ëÇÑ (UMLÀ» Æ÷ÇÔÇÑ)¼³¸í±ÛÀ» º¸¸é ¿ª½Ã »ç¿ëÇÏ´Â °Íº¸´Ù ¼³¸íÇÏ´Â°Ô ´õ ¾î·Æ±ºÀ̶ó´Â ´À³¦ÀÌ´Ù. ³» »ý°¢À» Àß ÀÌÇØÇϱ⠽±°Ô Àß Àü´ÞÇØº¸ÀÚ¶ó´Â ¸¶À½°¡ÁüÀ¸·Î °¡´ÉÇÑ ÆòÀÌÇÏ°Ô ±ÛÀ» ¸¸µé¾î ºÁ¾ß°Ú´Ù.
Command PatternÀº ÇൿÀÚü¸¦ °´Ã¼·Î º»´Ù. ÇൿÀ» °´Ã¼·Î º½À¸·Î½á Á»´õ ½±°Ô ¸í·ÉÀ» ³»¸®±â ÀüÀÇ »óÅ·Πº¹±ÍÇÒ ¼ö ÀÖ´Ù. ¹®Á¦°¡ »ý±æ¶§ ¸¶´Ù ±×¶§ ±×¶§ ÂÊÁö·Î ÀϰŸ®¸¦ ¸¸µé¾î¼ ÁÖ´Â °æ¿ì¸¦ »ý°¢ÇØ º¸ÀÚ. ³ªÁß¿¡ ±× °á°ú¸¦ Á¤¸®ÇÏ´Â °Íµµ ¸Å¿ì º¹ÀâÇÑ ÀÏÀÌ µÉ È®·üÀÌ ³ôÀ» °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÏÁö ¾Ê°í ¹®Á¦ÀÚü¸¦ °´Ã¼·Î ¸¸µé¾î¼, ±×·¯´Ï±î ¹®Á¦¸¦ ºÐ·ùÇÏ°í ¹¾î¼ ¼·ùöÀ» ¸¸µé¾î¼ ³Ñ±â°í °á°ú¸¦ Æ÷ÇÔÇÑ ¼·ùöÀ» ´Ù½Ã ¹Þ°Ô µÈ´Ù¸é ¹®Á¦¿¡ ´ëÇÑ Ã³¸®°¡ ÈξÀ °£°áÇØ Áú °ÍÀÌ´Ù. ÀϹÝÀûÀÎ ¾÷¹«Ã³¸®¿¡¼µµ ÈçÈ÷º¼ ¼ö ÀÖ´Â ¹æ½ÄÀ̱⵵ ÇÏ´Ù. Command PatternÀ̶õ Áï ¼öÇàÇØ¾ßÇÒ ¹®Á¦ ȤÀº ¸í·ÉÀ» °´Ã¼·Î ó¸®ÇÏ´Â ¹æ½ÄÀ̶ó°í Á¤Àdz»¸± ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÀÌ·¯ÇÑ Æ¯Â¡Àº ´ÙÀ½°ú °°Àº ÀÀ¿ë¿¡ À¯¿ëÇÏ´Ù.
![]()
Command
ÀÌ ÆÐÅÏ¿¡¼ °¡Àå Áß¿äÇÑ Å¬·¡½º´Â ¸í·ÉÀ» ¼öÇàÇϴµ¥ ÇÊ¿äÇÑ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÀÖ´Â Command°´Ã¼´Ù. ÀÏ»ó¾÷¹«¿¡¼ÀÇ ÀÛ¾÷¿äû¼¶ó°í º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿ì¸®°¡ ÀÌ ÆÐÅÏÀ» »ç¿ëÇÏ´Â ÀÌÀ¯´Â ¸í¼¼¼¿¡ ÀûÇôÀÖ´Â ¸í·ÉÀ» ½ÇÇàÇÏ´Â °ÍÀ̹ǷΠ¸í·ÉÀ» ¼öÇàÇϱâ À§ÇÑ execute¸Þ¼µå¸¦ Æ÷ÇÔÇÑ´Ù.
ConcreteCommand
Receiver°´Ã¼°¡ ¾î¶² ActionÀ» ÃëÇÒÁö¸¦ Á¤ÀÇÇÑ´Ù.
Receiver
ÁÖ¾îÁø ¿äû¿¡ ´ëÇØ¼ ¾î¶²ÀÏÀ» ¼öÇàÇØ¾ß ÇÏ´ÂÁö¸¦ ¾Ë°í ÀÖ´Â °´Ã¼.
Invoker
¸í·ÉÀÇ ¼öÇàÀ» ¿äûÇÑ´Ù.
Client
ConcreteCommand °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
¿¹Á¦C++
°£´ÜÇÑ ¿ä¸® ÇÁ·Î±×·¥ÀÌ´Ù. Àç·á¸¦ Áغñ¸¦ À§ÇÑ Áغñ¸í·É°´Ã¼, ÁغñµÈ Àç·á¸¦ °¡Áö°í ÇÁ¶óÀÌÆÒ¿¡ ºº´ÂµîÀÇ ÀÛ¾÷À» ÇÏ´Â Çൿ¸í·É°´Ã¼°¡ ÁغñµÈ´Ù. ¿ä¸®´Â »ç¶÷ÀÌ ÇÏ´Â °Å¶ó¼ ¶§¶§·Î ½Ç¼ö°¡ ÀÖÀ» ¼ö Àֱ⠶§¹®¿¡ Undo±â´ÉÀ» °¡Áø´Ù. Undo ±â´ÉÀº ¸í·É°´Ã¼¸¦ stack¿¡ ½×¾ÆµÎ°í popÇÏ´Â °ÍÀ¸·Î ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ºü¸¥ ±¸ÇöÀ» À§Çؼ STLÀÇ vector¸¦ »ç¿ëÇß´Ù. #include <iostream>
#include <vector>
#include <string>
using namespace std;
// °¡»ó¸Þ¼µå¸¦ Æ÷ÇÔÇÑ ÀÎÅÍÆäÀ̽º ½´ÆÛ Ŭ·¡½º
class Command{
public:
virtual void execute(void) =0;
virtual ~Command(void){};
};
class Ingredient : public Command {
public:
Ingredient(string amount, string ingredient){
_ingredient = ingredient;
_amount = amount;
}
void execute(void){
cout << " *Add " << _amount << " of " << _ingredient << endl;
}
private:
string _ingredient;
string _amount;
};
class Step : public Command {
public:
Step(string action, string time){
_action= action;
_time= time;
}
void execute(void){
cout << " *" << _action << " for " << _time << endl;
}
private:
string _time;
string _action;
};
// command¸¦ ÀúÀåÇÏ°í ²¨³»±â À§ÇÑ stack Ŭ·¡½º
class CmdStack{
public:
void add(Command *c) {
commands.push_back(c);
}
void createRecipe(void){
for(vector<Command*>::size_type x=0;x<commands.size();x++){
commands[x]->execute();
}
}
void undo(void){
if(commands.size() > 0) {
commands.pop_back();
}
else {
cout << "Can't undo" << endl;
}
}
private:
vector<Command*> commands;
};
int main(void) {
CmdStack list;
//Create ingredients
Ingredient first("µÎ½ºÇ¬", "½Ä¿ëÀ¯");
Ingredient second("¼¼ÄÅ", "½Ò");
Ingredient third("ÇѽºÇ¬","ÄÉÂý");
Ingredient fourth("³×È©", "Äá");
Ingredient fifth("ÇѽºÇ¬", "°£Àå");
//Create Step
Step step("ÈĶóÀÌÆÒ¿¡ ºº±â","3-4ºÐ Á¤µµ");
//Create Recipe
cout << "ººÀ½¹äÀ» ¸¸µé¾îº¾½Ã´Ù." << endl;
list.add(&first);
list.add(&second);
list.add(&step);
list.add(&third);
list.undo();
list.add(&fourth);
list.add(&fifth);
list.createRecipe();
cout << "¿ä¸®½ÃÀÛ!" << endl;
return 0;
}
C
À½.. ±×´Ú °´Ã¼ÁöÇâÀûÀÌÁö ¾Ê´Ù°í »ý°¢µÇ´Â C¸¦ ÀÌ¿ëÇØ¼µµ ±¸ÇöÇØ ºÁ¾ß °Ú´Ù. ´ÙÀ½°ú °°Àº ¿ä¼ÒµéÀÌ ÇÊ¿äÇÏÁö ¾ÊÀ»±î ½Í´Ù.±¸Á¶Ã¼¿¡ ÇÔ¼öÆ÷ÀÎÅÍ ´Ù¹ßÀ» µÎ´Â °ÍÀ¸·Î Ŭ·¡½º ºñ½ÁÇÏ°Ô ¸¸µé¾î³¾ ¼ö ÀÖ±ä ÇϰڴÙ.
PHP
¾ÖÃÊ¿¡ ÀüÇô °´Ã¼ÁöÇâÀûÀÌÁö ¾Ê°Ô ¸¸µé¾îÁ³´ø php´Â php4°¡ µÇ¾î¼¾ß class Ű¿öµå¸¦ Á¦°øÇϱ⠽ÃÀÛÇß°í php5¿¡ À̸£·¯¼ ±×·°Àú·° °´Ã¼ÁöÇâÀûÀÌ´Ù¶ó´Â ¾ê±â¸¦ µè°Ô µÇ¾ú´Ù. ÀÌÁ¦´Â °´Á¦ÁöÇâ ÆÐÅÏÀ» »ç¿ëÇØ¼ ¸¸µé¾îÁø PHP ÇÁ·Î±×·¥µµ ¾î·ÆÁö ¾Ê°Ô ã¾Æº¼ ¼ö ÀÖ´Ù.
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|