Design Patterns
Published in

Design Patterns

Tasarım Örüntüleri

Builder Pattern

Creational Patterns bir örneği olan Builder Pattern bize kompleks nesneleri oluşturmakta zorlandığımız durumlarda nasıl bu işlemi kolaylaştırabileceğimiz konusunda bir yaklaşım sunar.

Hangi Durumda

Aşağıdaki sınıfı incelediğimizde 4 tane özelliği bulunuyor. Bunlar x,y,width, height. 4 tane özelliği bu nesnenin anlamlı olması için gerekli. Bu durumda bu nesne için 1 tane constructor yeterli olacaktır.

class Rect
public Rect(int x, int y, int width,int height) //Constructor
class Complex
int x1,x2,x3,x4 ...................
constructor1(x1, x2)
constructor2(x3, x4)
constructor3(x5, x1)
.....
class Complex
setX1()
setX2()
setX3()
setX4()
//Sipariş Oluşturma işlemi 
Order order=new Order();
order.addHamburger(type, count)
order.addDrink(type, count)
order.addPizza(type, count)
......
//Sipariş Oluşturma işlemi 
Order order=new Order();
order.addHamburger(type, count)
order.addDrink(type, count)
sum = 3+2;
callFunction()
order.addPizza(type, count)
......

Avantajları

Ama bunu Builder Pattern ile yazdığımızda her kendi basit DSL(Domain Specific Language) oluşturacak this döneceği için daha odaklı bir nesne oluşturma yapısı oluşturabiliriz.

Nested Builder

new Order.Builder().hamburger(ABurger,2).drink(BDrink,1).build()
public class Order
ArrayList<Enum,int> hamburgers
ArrayList<Enum,int> drinks
ArrayList<Enum,int> pizza
public static class OrderBuilder
//return this
public OrderBuilder hamburger(type, count){}
public OrderBuilder drink(type, count){}
public OrderBuilder pizza(type, count){}
//return Order
public buid(){ return new Order()..}

Builder Pattern Yapısı

Builder Pattern Class Diagram
Builder Pattern from wikipedia

Değişiklik İhtiyaçlarını Nasıl Karşılayacak

  • Yeni bir Araç türü geldiğinde bu yapıyı değiştirmeden tek bir sınıf ekleyerek bu yapımızı genişletebiliriz.
  • İlgili araç özelinde bir kısıtlama geldiğinde ortak yapıyı etkilemeyen bir konu ise sadece ilgili sınıfta mantığı değiştirerek sorunu çözebiliriz.
  • Eğer Ortak bir yapıda değişiklik var ise bunun Tüm arayüzlerde değişikliğini bileceğiz ve tüm sistem sınıflarında güncelleme yaparak eksik bir nokta bırakmayı engeller.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store