Facade Tasarım Deseni

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda Facade Tasarım Deseni’ni anlatacağım. Hadi başlayalım !
Table of Contents
Aslında diğer tüm tasarım desenlerinde olduğu gibi Facade Tasarım Deseni de C# diline özgü bir kavram değil. Daha temiz ve anlaşılır kod yazabilmek için bir kesim tarafından belirlenmiş ve yazılım çevresinde kabul görmüş yazılı olmayan kurallardan birisidir. Dolayısıyla sadece C# dilinde değil, diğer tüm nesne yönelimli programlama yapılabilen dillerde de uygulanabilmektedir. Ben bu tasarım deseninin mantığını anlatabilmek ve örnek kodlar verebilmek için C# üzerinden anlattım fakat siz mantığını anladıktan sonra diğer dillerde de uyarlayabilirsiniz.
Facade Tasarım Deseni Nedir?
Facade tasarım deseni, bir sistemdeki karmaşık alt sistemleri bir araya getirerek, kullanımı daha basit ve anlaşılır hale getiren bir yapısal tasarım desenidir. Bu tasarım deseni, bir arayüz sağlayarak alt sistemlerin karmaşıklığını gizler ve istemcinin sadece bu arayüzü kullanarak alt sistemlerle etkileşim kurmasını sağlar.
Facade tasarım deseni, alt sistemlerin karmaşıklığını gizlemesi nedeniyle, sistemdeki değişikliklerden etkilenmeden çalışır. Ayrıca, daha modüler bir yapı sağlar ve kodun yeniden kullanılabilirliğini arttırır.
Facade Tasarım Deseni Nasıl Çalışır?
Facade tasarım deseni, bir facade (yüz) sınıfı oluşturarak çalışır. Bu sınıf, alt sistemlerle etkileşim kurmak için bir arayüz sağlar ve alt sistemlerin karmaşıklığını gizler.
İstemci, sadece bu facade sınıfını kullanarak alt sistemlerle etkileşim kurar. Bu, istemcinin alt sistemlerin karmaşıklığından kurtulmasını sağlar ve sadece önemli olan işlemlere odaklanmasına imkan tanır.
Facade Tasarım Deseni Uygulama Adımları
Facade tasarım desenini C# programlama dilinde uygulamanın adımları aşağıdaki gibidir:
- İlk olarak, alt sistemlerin tanımlandığı sınıflar oluşturulur.
- Daha sonra, Facade sınıfı oluşturulur. Bu sınıf, alt sistemlerle etkileşim kurmak için gereken arayüzü sağlar.
- Alt sistemlerin karmaşıklığını gizleyecek şekilde, Facade sınıfı alt sistemlere yönlendirmeler yapar.
- Son olarak, istemci, sadece Facade sınıfını kullanarak alt sistemlerle etkileşim kurar.
Facade Tasarım Deseni Örnekleri ve C# Kodları
Örnek 1: Ev Otomasyonu Sistemi
Aşağıdaki C# kodu, örneğimizdeki ev otomasyonu sistemi için Facade tasarım desenini nasıl uygulayacağımızı gösterir:
// Alt sistemlerin tanımlandığı sınıflar
public class IşıkSistemi
{
public void Aç() { }
public void Kapat() { }
public void ParlaklıkAyarla(int parlaklık) { }
}
public class KlimaSistemi
{
public void Aç() { }
public void Kapat() { }
public void SıcaklıkAyarla(int sıcaklık) { }
}
public class GüvenlikSistemi
{
public void Aç() { }
public void Kapat() { }
public void AlarmVer() { }
}
// Facade sınıfı
public class EvOtomasyonuSistemi
{
private IşıkSistemi ışıkSistemi;
private KlimaSistemi klimaSistemi;
private GüvenlikSistemi güvenlikSistemi;
public EvOtomasyonuSistemi()
{
ışıkSistemi = new IşıkSistemi();
klimaSistemi = new KlimaSistemi();
güvenlikSistemi = new GüvenlikSistemi();
}
public void EvAç()
{
ışıkSistemi.Aç();
klimaSistemi.Aç();
güvenlikSistemi.Aç();
}
public void EvKapat()
{
ışıkSistemi.Kapat();
klimaSistemi.Kapat();
güvenlikSistemi.Kapat();
}
public void IşıklarıAyarla(int parlaklık)
{
ışıkSistemi.ParlaklıkAyarla(parlaklık);
}
public void SıcaklığıAyarla(int sıcaklık)
{
klimaSistemi.SıcaklıkAyarla(sıcaklık);
}
public void AlarmVer()
{
güvenlikSistemi.AlarmVer();
}
}
Yukarıdaki kodda, önce alt sistemlerin tanımlandığı sınıflar oluşturuldu: IşıkSistemi, KlimaSistemi ve GüvenlikSistemi. Daha sonra, EvOtomasyonuSistemi adında bir Facade sınıfı oluşturuldu. Bu sınıf, alt sistemlerle etkileşim kurmak için gereken arayüzü sağlar.
EvOtomasyonuSistemi sınıfı, alt sistemlere yönlendirmeler yaparak alt sistemlerin karmaşıklığını gizler. Örneğin, EvAç metodu, IşıkSistemi, KlimaSistemi ve GüvenlikSistemi sınıflarını kullanarak evi açar. Bu sayede, istemci sadece EvOtomasyonuSistemi sınıfını kullanarak evi açabilir.
Aşağıdaki kod ise, EvOtomasyonuSistemi sınıfının kullanımını gösterir.
class Program
{
static void Main(string[] args)
{
EvOtomasyonuSistemi evSistemi = new EvOtomasyonuSistemi();
// Ev açılıyor
evSistemi.EvAç();
// Işıklar parlaklığı ayarlanıyor
evSistemi.IşıklarıAyarla(50);
// Sıcaklık ayarlanıyor
evSistemi.SıcaklığıAyarla(20);
// Güvenlik alarmı açılıyor
evSistemi.AlarmVer();
// Ev kapatılıyor
evSistemi.EvKapat();
Console.ReadKey();
}
}
Yukarıdaki kodda, önce EvOtomasyonuSistemi sınıfından bir nesne oluşturuldu: evSistemi. Daha sonra, EvAç metodu çağrılarak ev açıldı. Işıkların parlaklığı ve sıcaklık, sırasıyla IşıklarıAyarla ve SıcaklığıAyarla metotları kullanılarak ayarlandı. Son olarak, AlarmVer metodu çağrılarak güvenlik alarmı açıldı ve EvKapat metodu çağrılarak ev kapatıldı.
Bu örnekte, Facade tasarım deseni kullanarak, ev otomasyonu sistemimizi daha basit bir arayüzle sunmuş olduk. İstemci, alt sistemlerin karmaşıklığını bilmek zorunda değil, sadece EvOtomasyonuSistemi sınıfının sunduğu metotları kullanarak evi kontrol edebilir.
Tabii ki, bu örnek sadece bir tanesidir ve Facade tasarım deseni farklı uygulamalarda farklı şekillerde kullanılabilir. Ancak, bu örnek, Facade tasarım deseninin nasıl kullanılabileceği konusunda bir fikir vermek için yararlı olabilir.
Örnek 2: Müzik Çalar Uygulaması
Bir diğer örnek de, müzik çalma uygulaması üzerinden verebiliriz. Müzik çalma uygulaması, birçok alt sisteme sahip olabilir: müzik dosyalarının yüklenmesi, çalma listelerinin yönetimi, ses ayarları, internet bağlantısı, vb. Facade tasarım deseni, bu alt sistemlerin karmaşıklığını gizleyerek, müzik çalma uygulamasını daha kolay ve anlaşılır bir arayüzle sunabilir.
Aşağıdaki örnek, Facade tasarım desenini kullanarak müzik çalma uygulamasının basit bir arayüzle sunulmasını gösterir:
// Alt sistemlerin arayüzleri
class MüzikYükleyici
{
public void DosyalarıYükle()
{
Console.WriteLine("Müzik dosyaları yükleniyor...");
}
}
class ÇalmaListesiYönetici
{
public void ÇalmaListesiOluştur()
{
Console.WriteLine("Yeni çalma listesi oluşturuluyor...");
}
public void ÇalmaListesineŞarkıEkle()
{
Console.WriteLine("Çalma listesine şarkı ekleniyor...");
}
}
class SesAyarlama
{
public void SesiAyarla()
{
Console.WriteLine("Ses ayarları yapılıyor...");
}
}
class İnternetBağlantısı
{
public void Bağlan()
{
Console.WriteLine("İnternet bağlantısı sağlanıyor...");
}
}
// Facade arayüzü
class MüzikÇalmaUygulaması
{
private MüzikYükleyici _müzikYükleyici;
private ÇalmaListesiYönetici _çalmaListesiYönetici;
private SesAyarlama _sesAyarlama;
private İnternetBağlantısı _internetBağlantısı;
public MüzikÇalmaUygulaması()
{
_müzikYükleyici = new MüzikYükleyici();
_çalmaListesiYönetici = new ÇalmaListesiYönetici();
_sesAyarlama = new SesAyarlama();
_internetBağlantısı = new İnternetBağlantısı();
}
public void Başlat()
{
_müzikYükleyici.DosyalarıYükle();
_çalmaListesiYönetici.ÇalmaListesiOluştur();
_çalmaListesiYönetici.ÇalmaListesineŞarkıEkle();
_sesAyarlama.SesiAyarla();
_internetBağlantısı.Bağlan();
Console.WriteLine("Müzik çalınıyor...");
}
public void Duraklat()
{
Console.WriteLine("Müzik duraklatıldı.");
}
public void Durdur()
{
Console.WriteLine("Müzik durduruldu.");
}
}
// Kullanım örneği
class Program
{
static void Main(string[] args)
{
MüzikÇalmaUygulaması muzikCalmaUygulamasi = new MüzikÇalmaUygulaması();
muzikCalmaUygulamasi.Başlat();
// Müzik çalarken diğer işlemler yapılabilir
Console.WriteLine("Müzik çalıyor, diğer işlemler yapılıyor...");
müzikÇalmaUygulaması.Duraklat();
// Müzik duraklatıldıktan sonra diğer işlemler yapılabilir
Console.WriteLine("Müzik duraklatıldı, diğer işlemler yapılıyor...");
müzikÇalmaUygulaması.Durdur();
}
}
Bu örnekte, `MüzikÇalmaUygulaması` sınıfı, alt sistemler olan `MüzikYükleyici`, `ÇalmaListesiYönetici`, `SesAyarlama` ve `İnternetBağlantısı` sınıflarının karmaşıklığını gizleyerek, müzik çalma uygulamasının basit bir arayüzle sunulmasını sağlar. `MüzikÇalmaUygulaması` sınıfının `Başlat()`, `Duraklat()` ve `Durdur()` metotları, alt sistemlerin karmaşıklığını gizleyerek, müzik çalma uygulamasını yönetmek için yeterlidir.
Facade tasarım deseni, yazılım tasarımı ve mimarisi için önemli bir rol oynar. Karmaşık alt sistemleri yönetmek ve bu alt sistemleri mümkün olduğunca gizlemek, yazılımın daha modüler ve esnek olmasını sağlar. Bu sayede, alt sistemlerde yapılacak değişikliklerin diğer sistemlere olan etkisi minimize edilir ve yazılım daha kolay bakım yapılır hale gelir.
C# gibi nesne odaklı programlama dillerinde Facade tasarım deseni, özellikle büyük ve karmaşık projelerde çok önemlidir. Facade tasarım deseni, kodun daha okunaklı, anlaşılır ve bakımı kolay olmasını sağlar. Ayrıca, kodun daha az hatalı olmasına ve daha kolay test edilmesine de yardımcı olur.
Sonuç
Sonuç olarak, Facade tasarım deseni, karmaşık alt sistemlerin yönetilmesinde ve bu alt sistemlerin mümkün olduğunca gizlenmesinde büyük bir rol oynar. C# gibi nesne odaklı programlama dillerinde, Facade tasarım deseni, büyük ve karmaşık projelerde özellikle önemlidir. Bu tasarım deseni, kodun daha okunaklı, anlaşılır ve bakımı kolay olmasını sağlar.
Evet Facade Tasarım Deseni ve C# ile kullanımı bu şekilde yapılmakta. Tüm C# yazılarımıza buraya, diğer tasarım desenleri yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.