Builder Pattern Nedir?
Builder Pattern, yazılım geliştirme süreçlerinde karmaşık nesnelerin oluşturulması sürecini basitleştirerek bir nesnenin oluşturulmasını ve yapılandırılmasını adım adım yönetmeyi sağlayan ve kodun okunabilirliğini kolaylaştıran tasarım desenidir.
Erdoğancan Yüksel
2 dakika 42 saniye okuma süresi
Builder Pattern Nedir?
Erdoğancan Yüksel
2 dakika 42 saniye okuma süresi
Builder Pattern, yazılım geliştirme süreçlerinde karmaşık nesnelerin oluşturulması sürecini basitleştirerek bir nesnenin oluşturulmasını ve yapılandırılmasını adım adım yönetmeyi sağlayan ve kodun okunabilirliğini kolaylaştıran tasarım desenidir.
Builder pattern, nesneleri adım adım oluşturmamızı sağlayan yaratıcı (creational) tasarım desenlerinden birisidir. Çok sayıda parametreye sahip nesne oluşturma ihtiyacı duyulduğunda constructor (yapıcı metot) içerisinde fazla sayıda parametre ile uğraşarak karışıklığı arttırmak yerine adım adım nesne oluşturmak tercih edildiğinde kullanılmaktadır.
Builder pattern'ın kullanım amaçları şu şekilde sıralanabilir:
- Nesne oluşturma sürecini adım adım ilerleterek kodun daha anlaşılabilir ve okunabilir olmasını sağlar.
- Nesne oluştururken parçalarını farklı sırayla oluşturabilme imkanı ile esneklik sağlar.
- Yeni özelliklerin eklenmesi gereken durumlarda temel nesneyi değiştirmeden builder güncellenerek ekleme yapılabilir.
- Birçok parametre içeren constructor (Teleskopik Constructor) yapısının oluşturduğu karmaşıklığı azaltır.
Builder pattern kullanımının avantajları ve dezavantajları şu şekilde sıralanabilir:
Avantajları:- Constructor build aşamasında parametrelerin kontrolü yapılabilir.
- Bir kez oluşturulan nesne değiştirilemez.
- Farklı nesneler için ortak builder aşamaları kullanılabilir. Bu şekilde kod tekrarı önlenmiş olur.
- Adım adım nesne oluşturma işlemi basit nesneler için gereksiz karmaşıklık yaratabilir ve ekstra kod yazılmasını gerektirir. Bu nedenle nesne oluşturma süreci karmaşık ise uygulanmalıdır.
C# ile Builder Pattern Uygulaması
Builder Pattern uygulaması için kod örneği:
// Product sınıfı - Car
public class Car
{
public string Brand { get; set; }
public string Color { get; set; }
public CarType CarType { get; set; }
public TransmissionType TransmissionType { get; set; }
public EngineType EngineType { get; set; }
public override string ToString()
{
return $"Car features: \n" +
$"Brand Name: {Brand}\n" +
$"Color: {Color}\n" +
$"Car Type: {Enum.GetName(typeof(CarType), CarType)}\n" +
$"Transmission Type: {Enum.GetName(typeof(TransmissionType), TransmissionType)}\n" +
$"Engine Type: {Enum.GetName(typeof(EngineType), EngineType)}\n";
}
}
// Enum tanımlamaları
public enum CarType
{
Sedan,
Hatchback,
Coupe,
SUV,
Jeep,
StationWagon
}
public enum TransmissionType
{
Automatic,
Manual
}
public enum EngineType
{
Diesel,
Gasoline,
Electric
}
// Builder arayüzü
public interface ICarBuilder
{
ICarBuilder SetBrand(string brand);
ICarBuilder SetColor(string color);
ICarBuilder SetCarType(CarType type);
ICarBuilder SetTransmissionType(TransmissionType type);
ICarBuilder SetEngineType(EngineType type);
Car Build();
}
// ConcreteBuilder sınıfı - CarBuilder
public class CarBuilder : ICarBuilder
{
private Car _car;
public CarBuilder()
{
_car = new Car();
}
public ICarBuilder SetBrand(string brand)
{
_car.Brand = brand;
return this;
}
public ICarBuilder SetColor(string color)
{
_car.Color = color;
return this;
}
public ICarBuilder SetCarType(CarType type)
{
_car.CarType = type;
return this;
}
public ICarBuilder SetEngineType(EngineType type)
{
_car.EngineType = type;
return this;
}
public ICarBuilder SetTransmissionType(TransmissionType type)
{
_car.TransmissionType = type;
return this;
}
public Car Build()
{
return _car;
}
}
// Director sınıfı - CarDirector
public class CarDirector
{
private ICarBuilder _carBuilder;
public CarDirector(ICarBuilder carBuilder)
{
_carBuilder = carBuilder;
}
public Car CreateDieselManualSedanCar()
{
return _carBuilder
.SetBrand("Volkswagen")
.SetColor("Blue")
.SetEngineType(EngineType.Diesel)
.SetTransmissionType(TransmissionType.Manual)
.SetCarType(CarType.Sedan)
.Build();
}
public Car CreateGasolineAutomaticHatchbackCar()
{
return _carBuilder
.SetBrand("Mercedes")
.SetColor("Black")
.SetEngineType(EngineType.Gasoline)
.SetTransmissionType(TransmissionType.Automatic)
.SetCarType(CarType.Hatchback)
.Build();
}
public Car CreateElectricAutomaticJeepCar()
{
return _carBuilder
.SetBrand("Tesla")
.SetColor("White")
.SetEngineType(EngineType.Electric)
.SetTransmissionType(TransmissionType.Automatic)
.SetCarType(CarType.Jeep)
.Build();
}
}
// Kullanım
var builder = new CarBuilder();
var director = new CarDirector(builder);
var carType1 = director.CreateDieselManualSedanCar();
Console.WriteLine(carType1);
var carType2 = director.CreateGasolineAutomaticHatchbackCar();
Console.WriteLine(carType2);
var carType3 = director.CreateElectricAutomaticJeepCar();
Console.WriteLine(carType3);
//Director sınıfında belirttiğimiz hazır metotların dışında bir metot kullanmak istersek:
var customCarType = builder
.SetBrand("BMW")
.SetColor("Red")
.SetEngineType(EngineType.Gasoline)
.SetTransmissionType(TransmissionType.Automatic)
.SetCarType(CarType.Coupe)
.Build();
Console.WriteLine(customCarType);
//# Output:
Car features:
Brand Name: Volkswagen
Color: Blue
Car Type: Sedan
Transmission Type: Manual
Engine Type: Diesel
Car features:
Brand Name: Mercedes
Color: Black
Car Type: Hatchback
Transmission Type: Automatic
Engine Type: Gasoline
Car features:
Brand Name: Tesla
Color: White
Car Type: Jeep
Transmission Type: Automatic
Engine Type: Electric
Car features:
Brand Name: BMW
Color: Red
Car Type: Coupe
Transmission Type: Automatic
Engine Type: Gasoline
Yukarıdaki kod bloğunda:
- Car: Oluşturmak istenilen karmaşık nesneyi ifade eder.
- ICarBuilder: Car nesnesinin yapılandırılması için ilgili basamak metotlarını içeren arayüzdür.
- CarBuilder: ICarBuilder arayüzünü uygulayarak Car nesnesini oluşturur.
- CarDirector: CarBuilder ile Car nesnesinin oluşturulmasını kontrol eder. İstenilen parametreler doğrultusunda farklı nesneler oluşturur. (CreateDieselManualSedanCar, CreateGasolineAutomaticHatchbackCar veya CreateElectricAutomaticJeepCar gibi)
Sonuç olarak Builder Pattern nesne yönelimli programlama dillerinde nesne oluşturma sürecini sadeleştirerek daha yönetilebilir ve anlaşılır hale getiren güçlü bir tasarım desenidir. Özellikle parametre sayısı fazla ve karmaşık nesneler ile çalışırken kodun daha temiz ve bakımı kolay hale getirilmesini sağlamaktadır.
Benzer İçerikler
Singleton Pattern Nedir?
Singleton Pattern, bir sınıfın yalnızca bir kez oluşturulmasını sağlayarak birden fazla örnek oluşturulmasını engellemek ve ilgili sınıfa global bir erişim noktası sunmak amacıyla yaygın olarak kullanılan bir tasarım desenidir.
1 Ekim 2024
3 dakika 8 saniye okuma süresi
Factory Method Pattern Nedir?
Factory Pattern, nesne oluşturma sürecinin soyutlayıp bir merkezde toplayarak hangi sınıfın örneğinin oluşturulması gerektiğine karar veren bir sınıf tanımlanması için kullanılan yaratıcı (creational) tasarım desenlerinen birisidir. Özellikle karmaşık nesne yaratma işlemlerinin kontrol edilmesi gereken durumlarda kodun daha esnek ve sürdürülebilir olmasını sağlamaktadır.
11 Ekim 2024
2 dakika 10 saniye okuma süresi
Adapter Pattern Nedir?
Adapter Pattern, uyumsuz arayüzlere sahip iki sınıfın birlikte çalışmasını sağlamak amacıyla kullanılan yapısal (structural) tasarım desenlerinden birisidir. Bir sınıfın arayüzünü (interface) başka bir sınıfın beklediği arayüze dönüştürerek iki sınıf arasında bir köprü kurmaktadır.
5 Ekim 2024
2 dakika 46 saniye okuma süresi
Prototype Pattern Nedir?
Prototype Pattern, mevcuttaki bir nesne örneğinin kopyalanarak benzer özelliklere sahip yeni nesneler oluşturulması için kullanılan bir tasarım desenidir.
13 Kasım 2024
2 dakika 29 saniye okuma süresi