팩토리 메소드는 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 정의하는 캡술화하는 패턴이다.
이 패턴은 추상적인 클래스를 통해 실제 구현 대상인 Concrete와 Client 간의 결합도를 낮춘다.
구조

▷ Product : 팩토리 메소드로 생성될 객체의 공통 인터페이스
▷ ConcreteProduct : 구체적으로 객체가 생성되는 클래스
▷ Creator : 팩토리 메소드를 갖는 클래스
▷ ConcreteCreator : 팩토리 메소드를 구현하는 클래스로 ConcreteProduct 객체를 생성
Product와 ConcreteProduct를 dll로 구성하고 이를 ConcreteCreator에서 사용하면 결합도를 낮출 수 있다.
구현

구현 코드 >>>>
interface Pizza
{
void prepare();
void bake();
void packing();
}
abstract class PizzaStore
{
public Pizza orderPizza(string type)
{
//factory 매소드 사용
Pizza pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.packing();
return pizza;
}
//factory method
public abstract Pizza createPizza(string type);
}
class MrsPizzaStore : PizzaStore
{
public override Pizza createPizza(string type)
{
if (type.Equals("Cheese"))
{
return new MrsPizzaCheese();
}
else if (type.Equals("Hawaiian"))
{
return new MrsPizzaHawaiian();
}
return null;
}
}
class MrsPizzaCheese : Pizza
{
public void bake()
{
Console.WriteLine("짭쪼름한 치즈가 가득한 치즈피자가 구워지는 중 ... 🍕");
}
public void packing()
{
Console.WriteLine("짭쪼름한 치즈가 가득한 치즈피자 포장 중 ... 🍕");
}
public void prepare()
{
Console.WriteLine("준비중입니다. ");
}
}
class MrsPizzaHawaiian : Pizza
{
public void bake()
{
Console.WriteLine("단짠의 최강자 하와이안 피자가 구워지는 중 ... 🍕");
}
public void packing()
{
Console.WriteLine("단짠의 최강자 하와이안 피자 포장 중 ... 🍕");
}
public void prepare()
{
Console.WriteLine("준비중입니다. ");
}
}
static void Main(string[] args)
{
PizzaStore pizza = new MrPizzaStore();
pizza.createPizza("Cheese");
pizza.orderPizza("Cheese");
}
결과값 >>>>

팩토리 메소드는 서브 클래스로 인해 객체의 자료형이 결정되기 때문에 확장성 있는 프로그램 뼈대를 만들 때 유 용하다.
그러나 객체가 늘어날 때마다 서브 클래스 재정의로 인한 불필요한 클래스 생성할 가능성이 있다.
이름이 비슷한 팩토리 메소드 패턴과 추상 팩토리 패턴의 공통점과 차이점은 무엇일까??
◆공통점
- Factory 클래스를 사용하여 생성
- 추상클래스와 인터페이스를 이용함
- 캡슐화
◆차이점
- 팩토리 메소드에서 만드는 객체의 종류
→ 팩토리 매소드 패턴
인자에 따라 객체의 종류가 결정 됨
→ 추상 팩토리 패턴
인자에 따라 관련 된 객체를 생성하는 팩토리의 종류가 결정 됨.
- 결합도 낮추는 대상
→ 팩토리 매소드 패턴
ConcreteProduct와 Client 간의 결합도를 낮출 때 사용
→ 추상 팩토리 패턴
ConcreteFactory와 Client간의 결합도를 낮출 때 사용
- 결합도 낮추는 대상
→ 팩토리 매소드 패턴
ConcreteProduct와 Client 간의 결합도를 낮출 때 사용
→ 추상 팩토리 패턴
ConcreteFactory와 Client간의 결합도를 낮출 때 사용
팩토리 메소드 패턴은 마치 '상품 A를 만들어줘' 와 같은 패턴이고
추상팩토리 패턴은 마치 '상품A를 만들 수 있는 공장을 찾아줘'라는 패턴이다.
'STUDY > Design Pattern' 카테고리의 다른 글
| 어댑터 패턴 (Adapter pattern) (0) | 2022.11.27 |
|---|---|
| 단일체 패턴(Singleton Pattern) (0) | 2022.11.27 |
| 원형 패턴 (Prototype Pattern) (0) | 2022.11.27 |
| 빌더 패턴 (Builder Pattern) (0) | 2022.11.27 |
| 추상 팩토리 패턴 (Abstract Factory Pattern) (0) | 2022.11.27 |