16 Eylül 2019 Pazartesi

GoF - Factory Örüntüsü

Giriş
Factory tasarım örüntüsü ile belli bir arayüzü gerçekleştiren farklı nesneler yaratılabilir.

1. If/Else Kullanmayan Factory
Parametre olarak geçilen tip için if/else yapmak yerine, parametreyi Factory Örüntüsünün döndürebileceği tüm nesnelere teker teker eşleşme için sorarız. Eşleşen ilk nesneyi döndürürüz. Bir örnek burada

2. Dictionary Kullanan Factory
Bu kullanım şeklinde de if/else yok

2.1 Eager Factory
Eager benim kullandığım bir tabir. Nesnelerin en baştan bir kere yaratılarak bellekte tutulması ve tekrar tekrar kullanılması anlamına gelir.
Örnek
Şöyle yaparız.
var fooDict = new Dictionary<int, IBigObject>()
{
    { 0, new Foo() }, // Creates an instance of Foo
    { 1, new Bar() }, // Creates an instance of Bar
    { 2, new Baz() }  // Creates an instance of Baz
}

var quux = fooDict[0]; // quux references Foo
2.2 Lazy Factory 
Nesnelerin hep yeniden yaratılması anlamına gelir.
Örnek
Şöyle yaparız.
var fooDict = new Dictionary<int, Func<IBigObject>>()
{
    { 0, () => new Foo() }, // Returns a new instance of Foo when invoked
    { 1, () => new Bar() }, // Ditto Bar
    { 2, () => new Baz() }  // Ditto Baz
}

var quux = fooDict[0](); // equivalent to saying 'var quux = new Foo();'

C#'taki Lazy sınıfı ile de aynı şey yapılabilir.
var fooDict = new Dictionary<int, Lazy<IBigObject>>()
{
    { 0, new Lazy(() => new Foo()) }, // Returns a new instance of Foo when invoked
    { 1, new Lazy(() => new Bar()) }, // Ditto Bar
    { 2, new Lazy(() => new Baz()) }  // Ditto Baz
}

Hiç yorum yok:

Yorum Gönder