[Computer Science]/[디자인 패턴]

[디자인패턴] 팩토리 메서드 패턴(Factory Method Pattern)

극꼼 2022. 5. 17. 13:41
반응형


1. 팩토리 메서드 패턴이란?

2. 팩토리 메서드 패턴의 장단점

3. 팩토리 메서드 패턴 예시 코드


1. 팩토리 메서드 패턴이란?

: 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지 서브클래스에서 결정하는 것입니다. 동일한 인터페이스를 준수하는 클래스들을 생성하는 것이 목적입니다.

 

* 구조

  Product Creator
  Product Creator
Concrete ConcreteProduct ConcreteCreator

- Product : 팩토리 메서드로 생성될 공용 객체. 주로 추상 클래스 또는 인터페이스

- ConcreteProduct : Product를 상속받는 객체

- Creator : Product가 구현하는 메서드가 존재. 주로 추상 클래스 또는 인터페이스

- ConcreteCreator : Creator를 상속받음.

 

2. 팩토리 메서드 패턴의 장단점

* 장점

- 객체의 생성을 한군데에서 관리할 수 있습니다.

- 동일한 인터페이스 구현으로, 새로운 객체가 추가되더라도 소스의 수정이 거의 없습니다.

 

* 단점

- 패턴 구현에 의해 코드가 복잡해질 수 있습니다.

 

3. 팩토리 메서드 패턴 예시 코드(C#)

- Product = (추상 클래스) 생성할 객체의 공통적인 특성을 지님

abstract class Animal  
{ 
    protected string name; 
}

 

- ConcreteProduct = Dog, Cat = Enemy를 상속받음. 인터페이스를 실제로 구현

class Dog : Animal  
{ 
    public Dog() 
    {
        name = "Dog"; 
        Console.WriteLine(this.name); 
    } 
} 
class Cat : Animal  
{ 
    public Cat() 
    { 
        name = "Cat";
        Console.WriteLine(this.name); 
    } 
}

 

- Creator = (추상 클래스) Product 타입의 객체를 반환하는 팩토리 메서드를 선언하는 클래스

abstract class Creator  
{ 
    private List<Animal> _Animal = new List<Animal>(); 
    public Creator() { } 
    public List<Animal> Animals 
    { 
        get { return _Animal; } 
    } 
    public abstract void CreateAnimals();
}

 

- ConcreteCreator : PatternAGenerator, PatternBGenerator. Creator를 상속받아 오버라이딩.

class PatternAGenerator : Creator 
{ 
    public override void CreateAnimals() 
    { 
        Animals.Add(new Dog()); 
        Animals.Add(new Cat()); 
    } 
} 

class PatternBGenerator : Creator 
{ 
    public override void CreateAnimals() 
    { 
        Animals.Add(new Cat()); 
        Animals.Add(new Cat()); 
    } 
}
반응형