Giriş
Factory tasarım örüntüsü ile belli bir arayüzü gerçekleştiren farklı nesneler yaratılabilir.
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.
Nesnelerin hep yeniden yaratılması anlamına gelir.
Örnek
Şöyle yaparız.
C#'taki Lazy sınıfı ile de aynı şey yapılabilir.
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