FACADE (ya da FAÇADE) Design Pattern Nedir ? Ne Zaman Kullanılır ?

Buse Tekin Aydın
İyi Programlama
Published in
3 min readSep 21, 2020

Facade Türkçe ’ye cephe olarak çevriliyor. Bu tasarım kalıbı adından da anlaşılacağı üzere yazılımımız için yeni cephe(arayüz) oluşturuyor diyebiliriz.

Bu tasarım kalıbı bir veya birden fazla sınıftaki karmaşayı bir cephenin ardına gizler.

Karmaşık alt sistemleri olan bir yapıyı ; tek , makul bir arayüz sağlayan Facade sınıfı oluşturarak basitleştirebiliriz.

Facade basit bir arayüz sağlar ve alt sistemleri bu arayüze dahil eder.

Yazacağımız bu arayüzde , alt sınıflar Facade sınıfımızdan bağımsız da çalışabilmeliler, Facade sadece bir kullanım kolaylığı sağlayan arayüz olacak tasarımımızda.

Şekil 1’de gösterildiği gibi biz Facade arayüzünü kullandığımızda diğer classların metot detaylarını bilmek istemiyoruz.

Şekil 1 Facade tasarım deseni örnek UML — kaynak wiki

Erişim sırası :

Client -> Facade -> Subsystem

Şimdi yazıma okuduğum design pattern kitabından örnekle devam edeceğim.

Örnek : Ev Sinema Sistemi

Evimize bir sinema sistemi kurmaya çalıştığımızda kabaca aşağıdaki sınıflara ve onların görevlerine ihtiyacımız var.

ev sinema sisteminde kullanılacak sınıflar

Film izlemek istediğimizde yukarıdaki sınıflara ait metotları çağırıp ayarlamaları yapmamız gerekecek.

Gayet uzun ve yorucu bir iş. Gözümüzden kaçan metotlar olabilir ayağa kaldırmadığımız.

Ve her film izlemek istediğimizde bunları tekrar tekrar ayarlayacağız.

Facade bu noktada devreye girse işler nasıl kolaylaşır ?

  • Karmaşık sistemimizi bağımlı kılmadan; tek, daha makul bir arayüz sağlayan bir Facade sınıfı yaratarak kullanımını kolaylaştırabiliriz.
  • Facade sınıfı alt sınıfları encapsulate etmeyecek. Onların fonksiyonlarına basit bir arayüz sağlayacak.
  • Alt sistemdeki sınıflar hala client tarafından ulaşılabilir olacak.
  • Farklı clientlara göre farklı Facade sınıfları yazarak farklı özellikleri birleştirebiliriz. Alt sitem aynı kalır, client’dan bağımsız kalır, özellikleri kullanım clientlara göre değişir.
  • Facade client’ı alt sistemden ayırır.

HomeTheaterFacade sınıfı :

HomeTheaterFacade sınıfı

Şimdi constructor’da tanımladığımız bu alt sınıfları kullanacağımız “film izle “ ve “film kapa” metotlarını yazalım.

Facade sınıfının 2 temel fonksiyonu.Film izle — film kapa

Bütün ayarları bu 2 metot yapacak.

Bizim bilmemiz gereken tek şey izlemek istediğimiz filmin adını watchMovie(“filmin adı”) metotumuza göndermek.

Client tarafı:

HomeTheaterTestDrive sınıfımız çok temiz oldu. Detaydaki cihazların fonsiyonlarınu bilmeme gerek yok. Popcorn makinesiyle , DVD ile Facade ilgileniyor :) Tabi kullanılan cihazları Facade sınıfına biz gönderiyoruz.

Siz de karmaşık bir sisteminizin detaylarıyla client’ı uğraştırmak istemiyorsanız bu tasarım desenindeki gibi bir arayüzle detay işleri bir sınıfa yığabilirsiniz.

Örnek : Video Dönüştürücü

Uygulamamız VideoConverter isminde bir Facade sınıfı kullandığında , alt sistemdeki sınıfların metotlarıyla ilgilenmesi gerekmiyor.Onun bilmesi gereken convertVideo() metotoduna parametre olarak göndereceği bilgiler.

Bir framework yazdığımızda bu yapıyı yönetmemizi de kolaylaştırıyor. Daha farklı özellikleri ekleyeceğimiz bir sürüm çıktığımızda sadece facade sınıfımızı değiştirmemiz yeterli olur.

kaynak = refactoring.guru

Kaynak:

Head First: Design Patterns Eric Freeman

https://refactoring.guru/design-patterns/facade

--

--