C#'ta Builder Design Pattern'in Kullanımı

Bu derste builder design pattern'in kullanımına göz atalım.

Builder Design Pattern: Builder Design Pattern Creational Patterns gurubu içerisinde yer alır. Üretimi bir çok parçadan oluşmuş, çok parçalı karmaşık nesnelerin parçalarının adım adım bir araya getirilerek oluşturulmasını sağlayan bir tasarım desenidir. Nesne üretecek istemci, üretilecek nesnenin tipini belirleyerek nesneyi elde eder. Nesne üretimi ile ilgilenmez.

Director: Builder arayüzünü uygulayarak nesne örneklemesi yapan yapı.

Builder: Nesne oluşturulma işlemi şablonu için abstract class veya interface.

ConcreteBuilder: Nesnenin temel özelliklerini oluşturacak yapı. Ayrıca nesnenin dışa açılmasını sağlayan yapılar da içerir.

Product: Nesne

Örneğimizde Bir bilgisayar üretimi aşamalarını konumuz ile ilişkilendirmeye çalışacağız.

namespace ConsoleApplication1

{

//Builder

public abstract class ComputerBuilder

{

protected Product computer;


public Product Computer

{

get { return computer; }

}


public abstract void UretimHattinaAl(); public abstract void CihazMontaj();

public abstract void IsletimSistemiKurulum();

}


//Product

public class Product

{

public string Marka { get; set; } public string Model { get; set; } public string Anakart { get; set; } public string Cpu { get; set; } public string Ram { get; set; } public string HDD { get; set; } public string Kasa { get; set; } public string Klavye { get; set; } public string Mouse { get; set; } public string Monitor { get; set; } public string OS { get; set; }


public override string ToString()

{

return Marka + " Marka " + Model + " Model bilgisayar

üretildi.";

}

}


//Director

public class Director

{

public void BilgisayarUret(ComputerBuilder computerBuilder)

{

computerBuilder.UretimHattinaAl(); computerBuilder.CihazMontaj(); computerBuilder.IsletimSistemiKurulum();

}

}


//ConcreteBuilder A

public class AConcreteBuilder : ComputerBuilder

{

public AConcreteBuilder()

{

computer = new Product();

}


public override void UretimHattinaAl()

{

computer.Marka = "A"; computer.Model = "Home 1000";

}


public override void CihazMontaj()

{

computer.Anakart = "Gigabyte"; computer.Cpu = "Intel"; computer.HDD = "Samsung 300GB"; computer.Kasa = "AOpen"; computer.Klavye = "OEM"; computer.Mouse = "OEM"; computer.Monitor = "Philips"; computer.Ram = "Kingston 2GB";

}


public override void IsletimSistemiKurulum()

{

computer.OS = "Windows 7";

}

}

//ConcreteBuilder B

public class BConcreteBuilder : ComputerBuilder

{

public BConcreteBuilder()

{

computer = new Product();

}


public override void UretimHattinaAl()

{

computer.Marka = "B"; computer.Model = "Server 200";

}


public override void CihazMontaj()

{

computer.Anakart = "Asus"; computer.Cpu = "Amd"; computer.HDD = "Maxtor 200GB"; computer.Kasa = "AOpen"; computer.Klavye = "OEM"; computer.Mouse = "OEM"; computer.Monitor = "Samsung"; computer.Ram = "Kingston 4GB";

}


public override void IsletimSistemiKurulum()

{

computer.OS = "Linux";

}

}


//Client class Program

{

static void Main(string[] args)

{

ComputerBuilder computerBuilder; Director director = new Director();


computerBuilder = new AConcreteBuilder(); director.BilgisayarUret(computerBuilder); Console.WriteLine(computerBuilder.Computer.ToString());


computerBuilder = new BConcreteBuilder(); director.BilgisayarUret(computerBuilder); Console.WriteLine(computerBuilder.Computer.ToString());


Console.Read();

}

}

}

Ekran çıktısı:

A Marka Home 1000 Model bilgisayar üretildi. B Marka Server 200 Model bilgisayar üretildi.

Client uygulama AConcreteBuilder ve BConcreteBuilder tipleri ile üretilecek bilgisayarın modelini seçmiş, istediği tipte bilgisayar ürettirmiş ve üretim aşaması ile ilgilenmemiş soyutlanmıştır. Builder pattern ile Abstract Factory pattern karıştırılmaktadır.

Aralarındaki fark Builder pattern üretimi karmaşık çok parçalı nesnelerle ilgilenmektedir. Abstract Factory üretimin karmaşık ya da basit olması ile ilgilenmez.

Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git