Gerçek dünya senaryosu

Varsayılımki, bir ev inşa ediyorsunuz ve ev inşa etmek için kapılara ihtiyacınız var. Bunun için ihtiyacınız olan şeyler ise : biraz tahta, yapıştırıcı ve çivi (ve kapı yapmak için gereken diğer araçlar). Kapıyı gerekli eşyaları kullanarak daha sonra yapabilirsiniz ama kapıyı kendiniz yapmak yerine bir basit bir fabrikadan yani bir marangozhaneden isteyebilirsiniz. Marangozhaneden istediğiniz zaman eviniz içerisindeki yapacağınız bir sürü kir ve işten kutulmuş olursunuz.

Basitçe :

Basit Fabrika istediğiniz nesnenin nasıl yaratılacağı mantığından ve yapacağınız efordan sizi kurtarır.
Sizi yani istemiciyi(veya client'ı) nesnenin nasıl yaratılacağı karşmasından kurtarır.
Nesne tabanlı programlamada(bundan sonra OOP diyeceğim), bir nesne olan fabrika diğer objeleri ve obje grubunu yaratmak için kullanılır.
Kullanacağımız dil olan c# ile nesne yaratma işlemini new keyword ile yapılmaktadır ama kendi dilinizi kullanarak da bu yapıyı uygulayabilirsiniz.

Yazılım Örneği

Öncelilikle bizim kapı arayüzü(interface) ve uygulaması(implemantation'ı) var.

public interface Door
{

}

public class WoodenDoor : Door
{
    private float _width { get;  }
    private float _height { get; set; }
    public WoodenDoor(float width,float height)
    {
        _width = width;
        _height = height;
    }
    public KeyValuePair<float, float> GetWidthAndHeight()
    {
        return new KeyValuePair<float, float>(_width,_height);
    }
}

Daha sonra kapı fabrikamızı(örneğimizdeki marangozhane oluyor bu class) yaratalım :

public class DoorFactory
{
    public static Door MakeDoor(float width,float height)
    {
        return new WoodenDoor(width, height);
    }
}

Daha sonra aşağıdaki gibi basit fabrikamızı kullanabiliriz:

// 75f(genislik)x200(yuksekliğinde) bir kapı yarattık.
var door = DoorFactory.MakeDoor(75f,200f);

Ne zaman kullanılmalı?

Obje yaratırken bir çok parametremiz olduğunda, ve iş mantığı(bussiness logic) karmaşıklaştığı zaman; nesne yaratma işlemini bir fabrikaya koymak, kod tekrarını önlemek için çok yararlı olacaktır.

Inspired by kamranahmedse, design-patterns-for-humans