Bu makalemizde Facade Design Pattern nedir? Nerelerde kullanılır? Konularına değineceğiz.
O zaman sorularımıza başlayalım J
Facade Pattern Nedir?
Facade Design Pattern, basitçe, sistemlerin kullanımını seviyelendirme işlemini gerçekleştirmektedir. Oluşturulan bir sistemde alt sistemler oluşturmaktadır. Sistem olarak bahsettiğimiz yapıyı class olarak düşünebiliriz. Alt sistemler ise bu sınıflar altına tanımlanmış olan sınıflardır diyebiliriz.
Kullanım sıklığı nasıl?
Facade Design Pattern’ı eminim birçoğunuz farkında olmadan kullanmışsınızdır. Bir örnekle Facade Pattern’ı incelediğimizde neden bu cümleyi kurduğumu anlayacaksınız.
Örnek:
Örneğimizde şu anda kullandığımız bilgisyarı inceleyelim. Bilgisayarın yaptığı temel işlemlerin bulunduğu bir sınıf oluşturalım. Bu işlemler: IslemciCalistir, IslemciJump, RAMOku,RAMYaz, HarddiskOku, HarddiskYaz methodları olsun.
class Bilgisayar
{
//İşlemci Fonksiyonları
public void IslemciCalistir() { }
public void IslemciJump(long adres) { }
//RAM Fonksiyonları
public byte[] RAÖOku(long adres) { throw new Exception(); }
public void RAMYaz(long adres, byte[] veri) { }
//Harddisk Fonksiyonları
public byte[] HarddiskOku(long adres) { throw new Exception(); }
public void HarddiskYaz(long adres, byte[] veri) { }
}
|
Bu sınıfı incelediğimizde bütün methodların Bilgisyar sınıfında tanımlandığını ve bu tanımlamanın, işlemlerin sayısı arttıkça karmaşıklaşacağını tahmin edebilmekteyiz. Bunun yerine FacadeDesign Pattern kullanılarak yapımız alt sınıflara bölünmek suretiyle işlemlerimiz parçalanabilir, hem kontrolü hem kodun okunabilirliği açsıından avantaj sağlanabilmektedir.
Açıklama satırlarına işlemcinin yaptığı işlemleri, RAM’in yaptığı işlemleri ve harddiskin yaptığı işlemleri belirttik. İşlemci işlemlerini Islemci, RAM işlemlerini RAM,harddisk işlemlerini Harddisk sınıfına taşıyıp bu sınıfları Bilgisayar altında tanımlarsak Bilgisayar sınıfımızı alt sınıflara bölme işlemini gerçekleştirmiş olacağız.
class Islemci
{
public void Calistir() { }
public void Jump(long adres) { }
}
class RAM
{
public byte[] Oku(long adres) { throw new Exception(); }
public void Yaz(long adres, byte[] veri) { }
}
class Harddisk
{
public byte[] Oku(long adres) { throw new Exception(); }
public void Yaz(long adres, byte[] veri) { }
}
|
Yukarıda Islemci, RAM ve Harddisk sınıflarını tanımladık. Şimdi Bilgisayar sınıfını tanımlayalım.
class Bilgisayar
{
public Islemci Islemci { get; set; }
public RAM Ram { get; set; }
public Harddisk Harddisk { get; set; }
}
|
Gördüğünüz üzere, Bilgisayar sınıfı altında Islemci, RAM ve harddisk sınıflarına özgü değişkenler oluşturduk. Bu yapı ile sınıfımızı karmaşıklıktan kurtarıp alt sınıflara (sistemlere) bölüp kodumuzun kontrolünü ve okunabilirliğini kolaylaştırmış olduk.
Bilgisayar sınıfımızın kullanımına bir örnek aşağıdaki gibi olacaktır.
public void Deneme()
{
Bilgisayar bilgisayar = new Bilgisayar();
//İşlemci işlemleri
bilgisayar.Islemci.Calistir();
bilgisayar.Islemci.Jump(1);
//RAM işlemleri
bilgisayar.Ram.Oku(1);
bilgisayar.Ram.Yaz(1, null);
//Harddisk İşlemleri
bilgisayar.Harddisk.Oku(1);
bilgisayar.Harddisk.Yaz(1, null);
}
|
Tekrar Facade Design Pattern tanımına dönüecek olursak, aşağıdaki resim aslında bu patterni çok güzel anlatmaktadır. Facade sınıfında birçok sınıf türünden değişkenler vardır. Bu sınıflar da SubSystem adı altında alt sistemler (sınıflar) olarak tanımlanmış ve işlemler için bu sınıflar kullanılmaktadır.
Veysel Uğur KIZMAZ