(C#)디자인패턴- 팩토리 + 빌더

티원·2025년 10월 4일

디자인패턴

목록 보기
3/16

팩토리 패턴과 빌더 패턴을 합친 코드

빌더 패턴은 그냥 특정 생성자를 수동으로 Set할수 있고,
팩토리 패턴은 객체를 생성하는 것을 담당으로 하는 class가 있다는 것을 기억하면
이해가 쉽다

코드

public class ObjectFactory
{
    public class FactoryBuilder
    {
        public GameObject Obj;
        public FactoryBuilder SetPosition(Vector2 newPos)
        {
            Obj.Position = newPos;
            return this;
        }
        public FactoryBuilder SetName(string name)
        {
            Obj.Name = name;
            return this;
        }
        public GameObject Return()
        {
            return Obj;
        }
    }

    private FactoryBuilder _builder = new FactoryBuilder();

    public FactoryBuilder Instantiate<T>() where T : GameObject, new()
    {
        _builder.Obj = new T();
        Console.WriteLine($"{_builder.Obj.GetType().Name}");
        return _builder;
    }
}

public class Monster : GameObject
{
    public Monster()
    {
        Console.WriteLine("자식생성자");
    }
    public override void Init()
    {
        Console.WriteLine("Monster Init");
    }
}

public class GameObject
{
    public string Name { get; set; }
    public Vector2 Position { get; set; }
    protected GameObject()
    {
        Console.WriteLine("부모 생성자");
        Init();
    }
    public virtual void Init() //사물마다 다른 init필요(몬스터는 hp초기화, 사물은 안해도됨)
    {
        Console.WriteLine("Gameobject Init");
    }
}

public struct Vector2
{
    public float X { get; set; }
    public float Y { get; set; }
    public Vector2(float x, float y)
    {
        X = x;
        Y = y;
    }
}
static void Main(string[] args)
{
    ObjectFactory factory = new ObjectFactory();
    GameObject firstMonster = factory.Instantiate<Monster>().Return(); //팩토리패턴 + 빌더패턴 클래스의 Return으로 반환
    GameObject secondMonster = factory.Instantiate<Monster>() //팩토리+빌더패턴으로 특정값 Set하고 Return
        .SetPosition(new Vector2(7, 9))
        .SetName("Goblin")
        .Return();
}

0개의 댓글