(디자인 패턴) 팩토리 메소드 패턴

무덤 팩토리 메소드 패턴이란?

– 개체를 만들 때 클래스의 인스턴스를 만듭니다. 하위 클래스에 의해 결정됨디자인 패턴

– 하나의 슈퍼클래스에 여러 서브클래스가 있는 경우 입력에 따라 하나의 서브클래스 인스턴스를 리턴한다.

– 다양한 구체화그 중에는 특정 구현을 만드는 다양한 방법이 있습니다. 공장제공하다

ㅁ 이용상황

– 생성할 객체의 클래스를 예측할 수 없는 경우

– 생성된 개체를 설명하는 책임을 하위 클래스에 할당하려는 경우

– 객체 생성 책임을 보조 하위 클래스 중 하나에 위임,

어떤 하위 클래스가 위임되고 있는지에 대한 정보를 최소화할 때

ㅁ 장점과 단점

(장점)

– 기존 코드 수정 없이 인스턴스 생성 및 확장 가능

(불리)

– 클래스가 많을 수 있음

– 틀림없이 공장 클래스를 상속 구체화만들어야 한다

ㅁ 예제 코드

공장: 셰이프크리에이터 (CircleCreator, TriangleCreator)

구현 : 모양 (원, 삼각형)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FactoryMethod
{
    class Program
    {
        static void Main(string() args)
        {
            CircleCreator cirCreator = new CircleCreator();
            TriangleCreator triCreator = new TriangleCreator();

            Shape circle = cirCreator.Create();
            Console.WriteLine("created 01 -----> {0}", circle);

            Shape triangle = triCreator.Create();
            Console.WriteLine("created 02 -----> {0}", triangle);
        }
    }
    public abstract class Shape
    {
        public abstract double GetArea();
    }
    public class Circle : Shape
    {
        public double Radius;
        public override double GetArea()
        {
            return 2 * Math.PI * Radius;
        }
    }
    public class Triangle : Shape
    {
        public override double GetArea()
        {
            return 0;
        }
    }
    public abstract class ShapeCreator
    {
        public abstract Shape Create();
    }
    public class CircleCreator : ShapeCreator
    {
        public override Shape Create()
        {
            return new Circle();
        }
    }
    public class TriangleCreator : ShapeCreator
    {
        public override Shape Create()
        {
            return new Triangle();
        }
    }
}

객체를 생성하는 부분은 다음과 같이 작성할 수 있습니다.

            Shape circle = new CircleCreator().Create();
            Console.WriteLine("created 01 -----> {0}", circle);

            Shape triangle = new TriangleCreator().Create();
            Console.WriteLine("created 02 -----> {0}", triangle);


ㅁ 개인적인 생각

– 몇 개의 개체를 생성해야 하는 경우 생성할 때마다 Creator의 인스턴스를 생성해도 괜찮을 것 같습니다.

– 많은 객체를 생성해야 하는 경우 Creator의 인스턴스를 한 번만 생성한 후 사용하는 것이 좋을 것 같습니다.