프로그래밍/GoF
[생성 패턴] - 추상 팩토리(Abstract Factory)
MAKGA
2022. 1. 12. 09:36
320x100
구조
#pragma once
#include <iostream>
class IProduct
{
public:
virtual void Operation() = 0;
};
class IAbstractFactory
{
public:
virtual IProduct* CreateProduct() = 0;
};
class ProductA : public IProduct
{
public:
void Operation() override
{
std::cout << "Operating ProductA" << std::endl;
}
};
class ProductB : public IProduct
{
public:
void Operation() override
{
std::cout << "Operating ProductB" << std::endl;
}
};
class AbstractFactoryA : public IAbstractFactory
{
public:
IProduct* CreateProduct() override
{
return new ProductA();
}
};
class AbstractFactoryB : public IAbstractFactory
{
public:
IProduct* CreateProduct() override
{
return new ProductB();
}
};
사용
int main()
{
IAbstractFactory* abstractFactory = nullptr;
IProduct* product = nullptr;
abstractFactory = new AbstractFactoryA();
product = abstractFactory->CreateProduct();
product->Operation();
abstractFactory = new AbstractFactoryB();
product = abstractFactory->CreateProduct();
product->Operation();
system("pause");
return 0;
}
구조의 생성을 수행하는 팩토리 클래스(AbstractFactory)를 정의하여 클라이언트가 팩토리 클래스의 인터페이스(CreateProduct())를 통해 구조를 생성할 수 있게 한다. 추상 팩토리 구조의 생성에 관한 구체적인 내용이 팩토리 클래스에서 구현되기에 구조의 생성에 대한 유연한 확장을 지원하고 클라이언트는 어떤 팩토리 객체를 사용하냐에 따라 다른 구조를 클라이언트가 세부 클래스를 이해할 필요 없이 제공받을 수 있다.
320x100