design pattern builder
simuruk wiki
- 객체 생성 작업을 대신해줄 클래스를 추가하는 패턴
- 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴
- 객체 생성이 복잡하거나 여러 개의 추가 작업이 필요한 경우 유용함
#include <stdio.h>
class Item
{
private:
char* sword;
char* armor;
public:
void setSword(char* swordType)
{
sword = swordType;
}
void setArmor(char* armorType){
armor = armorType;
}
void printItem(){
printf("%s\n",sword);
printf("%s\n", armor);
}
};
class yh_builder
{
protected:
Item* item;
public:
Item getItem(){
return *item;
}
void createItem(){
item = new Item();
}
virtual void buildSword() = 0;
virtual void buildarmor() = 0;
};
class metalItemBuilder : public yh_builder
{
public:
void buildSword(){
item->setSword("metalSword");
}
void buildarmor(){
item->setArmor("metalArmor");
}
};
class blackSmith
{
private:
yh_builder *builder;
public:
void setItem(yh_builder* itemBuilder){
builder = itemBuilder;
}
Item getItem(){
return builder->getItem();
}
void constructure(){
builder->createItem();
builder->buildarmor();
builder->buildSword();
}
};
int main()
{
blackSmith *smith = new blackSmith();
metalItemBuilder *metal = new metalItemBuilder();
smith->setItem(metal);
smith->constructure();
Item i = smith->getItem();
i.printItem();
return 0;
}