빌더 패턴이란 복잡한 오브젝트의 생성과 표현을 분리하는 과정으로 동일한 생성과정으로 다양한 표현(구현) 이 가능하다.
예를 들어 곧 보여줄 코드 예시에서 나올 탈 것이라는 클래스로 여러가지 탈것을 구현하고싶다면
각 탈 것마다 생성자를 만들어주지않고 각각 탈 것에 빌더클래스를 만들어줘 탈 것의 엔진, 바퀴, 외형들을 구현하는
클래스를 구현하고
Director 라는 클래스를 이용해 모든 빌더를 실행시키면 코드 가독성이 높아진다.

말이 길어져서 헷깔릴 수 있는데 추상메서드를 쓰는대신 탈 것 이라는 클래스를 만들고 (뼈대) 생성자는 만들지 않고
필드만 선언한다 ex) 바퀴, 엔진, 외형 등등
이 후
각 종류의 탈 것에 해당하는 빌더를 만들어서 각 종류의 탈 것에 어울리는 디테일을 붙여 준 후 (여기에서도 생성자는 만들지않는다) 디렉터라는 클래스 하나가 생성자 역할을 해주는 것이다.
코드예시)
탈 것
public class Vehicle
{
public string Type;
public string EngineType;
public int NumberOfWheels;
public int NumberOfSeats;
public int NumberOfDoors;
}
빌더 ( 예시는 많지만 하나만 쓰겠다.)
public class SedanBuilder : IVehicleBuilder
{
private Vehicle _vehicle;
public void BuildDoors()
{
_vehicle.NumberOfDoors = 4;
}
public void BuildEngine()
{
_vehicle.EngineType = "4 Cylinder";
}
public void BuildSeats()
{
_vehicle.NumberOfSeats = 5;
}
public void BuildVehicle()
{
_vehicle = new Vehicle();
_vehicle.Type = "Sedan";
}
public void BuildWheels()
{
_vehicle.NumberOfWheels = 4;
}
public Vehicle GetVehicle()
{
return _vehicle;
}
}
디렉터 (생성자)
public class Director
{
public Vehicle BuildVehicle(IVehicleBuilder builder)
{
builder.BuildVehicle();
builder.BuildDoors();
builder.BuildEngine();
builder.BuildSeats();
builder.BuildWheels();
return builder.GetVehicle();
}
}
메인
class Program
{
static void Main(string[] args)
{
var director = new Director();
var vehicles = new List<Vehicle>();
vehicles.Add(director.BuildVehicle(new SedanBuilder()));
vehicles.Add(director.BuildVehicle(new TricycleBuilder()));
vehicles.Add(director.BuildVehicle(new SevenFortySevenBuilder()));
foreach(var vehicle in vehicles)
{
Console.WriteLine($"Type: {vehicle.Type}");
Console.WriteLine($"Engine: {vehicle.EngineType}");
Console.WriteLine($"Seats: {vehicle.NumberOfSeats}");
Console.WriteLine($"Doors: {vehicle.NumberOfDoors}");
Console.WriteLine($"Wheels: {vehicle.NumberOfWheels}");
Console.WriteLine();
}
}
}
결과
Type: Sedan
Engine: 4 Cylinder
Seats: 5
Doors: 4
Wheels: 4
Type: Tricycle
Engine: Pedals
Seats: 1
Doors: 0
Wheels: 3
Type: 747
Engine: 4 Jet Engines
Seats: 416
Doors: 4
Wheels: 16
'개인공부 > 소프트웨어 개발 패턴' 카테고리의 다른 글
| (구조패턴) Adapter 어댑터 패턴 (2) | 2024.10.17 |
|---|---|
| (구조패턴) Composite 컴포짓 패턴 (0) | 2024.10.16 |
| (생성패턴) Abstract Factory 추상 팩토리 패턴 (1) | 2024.10.15 |
| (생성패턴) Factory Method : 팩토리메서드 패턴 (1) | 2024.10.15 |
| (생성패턴) Singleton 싱글턴 패턴 (0) | 2022.07.16 |