Dp Factorypattern
AbstractFactory 패턴 https://m.blog.naver.com/hblee4119/221961302794
https://digestcpp.com/designpattern/creational/factory/
class Pizza
{
public:
virtual void BakePizza()=0;
virtual void PackPizza()=0;
};
class DominoPanerrPiza : public Pizza
{
public:
void BakePizza() { std::cout<<"DominoPanerrPiza is ready"<<std::endl; }
void PackPizza() { std::cout<<"DominoPanerrPiza is packed"<<std::endl; }
};
class DominoCheesePiza : public Pizza {
public:
void BakePizza() { std::cout<<"DominoCheesePiza is ready"<<std::endl; }
void PackPizza() { std::cout<<"DominoCheesePiza is packed"<<std::endl; }
};
class PizzaFactory
{
protected:
std::unique_ptr<Pizza>_mPizza;
public:
Pizza* GetPizza(std::string type)
{
_mPizza.reset(CreatePizza(type));
return _mPizza.release();
}
private:
virtual Pizza* CreatePizza(std::string type)=0;
};
//DominoPizzaFactory
class DominoPizzaFactory:public PizzaFactory
{
private:
Pizza* CreatePizza(std::string type)
{
Pizza* pz = nullptr;
if(type == "Paneer")
pz = new DominoPanerrPiza;
else if (type == "Cheese")
pz = new DominoCheesePiza;
else
nullptr;
return pz;
}
};
//Client
int main()
{
std::cout<<"In Main"<<std::endl;
//Select Factory
std::unique_ptr<PizzaFactory>ptr{nullptr};
ptr.reset(new DominoPizzaFactory);
//Order the Pizza with type
std::cout<<"Ordering Paneer Pizza from Domino"<<std::endl;
std::unique_ptr<Pizza>upPz{nullptr};
upPz.reset(ptr->GetPizza("Paneer"));
upPz->BakePizza();
upPz->PackPizza();
std::cout<<"!!!!!!!!!!Got the Pizza!!!!!!!!!"<<std::endl;
return 0;
}
Written on September 14, 2022
