Category: Design Patterns

  • Flyweight

    Flyweight

    İnsan sınıfımız olsun. Bu sınıfın içinde yurttaş oldukları ülkelerin bayraklarının resmini de tutalım. Her resim 1mb boyutuna sahip olsun. 1024 tane nesne oluşturduğumuzda bellekte 1gb’lık alan kaplar. Dünya üzerinde yaklaşık 200 ülke olduğuna göre biz programımızda gereksiz yere aynı şeyin kopyasını oluşturuyoruz ve bunu yapmak için de ağır bir bedel ödüyoruz. Yapılması gereken şey resimlerle…

  • Proxy

    Proxy

    Proxy, başka bir nesne için bir ikame veya yer tutucu sağlamanıza izin veren yapısal bir tasarım modelidir. Proxy, orijinal nesneye erişimi kontrol ederek, istek orijinal nesneye ulaşmadan önce veya sonra bir şeyler gerçekleştirmenize izin verir.

  • Facade

    Facade

    Karmaşık arayüzü basit bir arayüzle maskelemekten ibaret. Örneğin sinema sisteminiz var. 10 tane farklı komponentten oluşuyor. Film izlemek için bu 10 komponenti tek tek ayarlamak açmak kapamak bir külfet. Bunun yerine tek tuşa basıyorsunuz ve bir sınıf yapılması gereken onlarca işi otomatik yapıyor.

  • Composite

    Composite

    https://stackoverflow.com/questions/5334353/when-should-i-use-composite-design-pattern A Composite is a pattern that is useful anytime you may need to selectively treat a group of objects that are part of a hierarchy as “the same” when they are in fact different. Typically the examples used talk in terms of treating leaves and nodes the same, but the pattern can also be…

  • Adapter
  • Prototype

    Prototype

    Bir nesnenin klonunu tam olarak oluşturabilmemiz için yazdığımız ek fonksiyon. Yani bellekte A nesnesinin klonu olan B nesnesini oluşturmak istiyorsak kullanabiliriz. Normalde integer vb primitive değişkenler için böyle bir şeye gerek yok ama class, struct gibi yapılarda bir nesnenin klonunu üretmek default olarak gelen = operatörünün haddini aşabiliyor. Arka planda bizlerin explicit olarak kopyalamamız gereken…

  • Decorator

    Decorator

    Decorator is a structural design pattern that lets you attach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors.

  • Bridge

    Bridge

    Bridge is a structural design pattern that lets you split a large class or a set of closely related classes into two separate hierarchies—abstraction and implementation—which can be developed independently of each other.

  • Strategy
  • State
  • Observer

    Observer

    Bir abonelik sistemi oluşturup. Bazı değişimlerin, bazı gözlemcilere bildirilmesidir. Temel amaç gereksiz sorgulamaların ve bilgi gönderimlerinin önüne geçmek. Observer is a behavioral design pattern that lets you define a subscription mechanism to notify multiple objects about any events that happen to the object they’re observing. Imagine that you have two types of objects: a Customer and a Store. The customer…

  • Memento

    Memento

    Memento is a behavioral design pattern that allows making snapshots of an object’s state and restoring it in future. The Memento doesn’t compromise the internal structure of the object it works with, as well as data kept inside the snapshots.

  • Command

    Command

    Command is a behavioral design pattern that turns a request into a stand-alone object that contains all information about the request. This transformation lets you pass requests as a method arguments, delay or queue a request’s execution, and support undoable operations.

  • Chain of Responsibility

    Chain of Responsibility

    Bir geri dönüşüm fabrikasındaki bantı düşünün. Bir nesne, banttan geçerken tipine ve şeklinde göre işçiler tarafından ayıklanır. Şöyle yapalım. Chain of Responsibility (Sorumluluk zinciri) buna benzer bir şekilde çalışır. Karpuzların elden ele taşınması gibi nesneler, handlerdan handler’a taşınır. Tek fark eğer handler nesneyi kullanabiliyorsa onu alıp kullanır. Yoksa sonraki handler a atar.

  • Factory & Abstract Factory

    Factory & Abstract Factory

    Bir nesnenin contruction işlemi için özel bir sınıf oluşturduysak bu factory method oluyor. Atıyorum koltuk üretmek için new koltuk(); çağrısı yapmaktan ziyade KoltukFabrikası(“koltuk”); gibi bir çağrı yapıyorsak bu factory methodu oluyor. Peki tek tip bir koltuğum yoksa ne olacak. Farklı stiller için aynı fabrikayı mı kullanmalıyım? Farklı stiller için farklı fabrikalar kullanabiliriz: KoltukFabrikası() nı abstract…

  • Builder

    Builder

    Tanım Birçok parametrenin ayarlanması gereken bir sınıfı oluşturmak için karmaşık constructorlar kullanmak yerine daha esnek yardımcı bir sınıf kullanmak. C++ implementasyonu