Facade Pattern (Cephe Tasarım Kalıbı), karmaşık sistemlerin kullanımını basitleştirmek için yüksek seviyeli bir arayüz sağlayan bir yapısal tasarım desenidir. Bu desen, istemci (client) ile alt sistemler arasındaki bağlantıyı yönetir ve istemcinin sistemin iç detaylarını bilmeden işlem yapmasını sağlar.
Ne Zaman Kullanılmalıdır?
Facade Pattern şu durumlarda kullanışlıdır:
- Karmaşık alt sistemleri tek bir noktadan yönetmek gerektiğinde.
- İstemcinin gereksiz yere birçok sınıfla doğrudan etkileşim kurmasını önlemek için.
- Kodun modüler ve daha okunabilir olmasını sağlamak gerektiğinde.
- Alt sistemler değiştiğinde istemcinin etkilenmemesi gerektiğinde.
Facade Pattern’in Avantajları ve Dezavantajları
Avantajlar:
- Sistemin kullanımını basitleştirir: Kullanıcıya daha kolay bir arayüz sunar.
- Bağımlılığı azaltır: Alt sistemde yapılan değişikliklerin istemciye olan etkisini en aza indirir.
- Bakımı kolaylaştırır: Alt sistemlerin bağımsız bir şekilde geliştirilmesine olanak tanır.
Dezavantajlar:
- Ekstra bir soyutlama katmanı ekler: Eğer alt sistemler zaten yeterince basitse, bu desen gereksiz olabilir.
- Bazı durumlarda esnekliği azaltabilir: Eğer istemci, doğrudan alt sistem bileşenleriyle çalışmak isterse, Facade sınıfı engelleyici olabilir.
Facade Pattern Kullanım Biçimleri
1. Basit Facade Kullanımı
// Alt sistem bileşenleri
class OrderService {
public void placeOrder() {
System.out.println("Sipariş verildi.");
}
}
class PaymentService {
public void makePayment() {
System.out.println("Ödeme işlemi tamamlandı.");
}
}
class ShippingService {
public void shipOrder() {
System.out.println("Sipariş kargoya verildi.");
}
}
// Facade Sınıfı
class ECommerceFacade {
private OrderService orderService;
private PaymentService paymentService;
private ShippingService shippingService;
public ECommerceFacade() {
this.orderService = new OrderService();
this.paymentService = new PaymentService();
this.shippingService = new ShippingService();
}
public void completeOrder() {
orderService.placeOrder();
paymentService.makePayment();
shippingService.shipOrder();
System.out.println("Sipariş tamamlandı.");
}
}
// Kullanım
public class Main {
public static void main(String[] args) {
ECommerceFacade ecommerce = new ECommerceFacade();
ecommerce.completeOrder();
}
}
Çıktı:
Sipariş verildi.
Ödeme işlemi tamamlandı.
Sipariş kargoya verildi.
Sipariş tamamlandı.
Gerçek Dünya Senaryosu: Video Akış Servisi
// Alt sistem bileşenleri
class VideoLoader {
public void loadVideo(String videoName) {
System.out.println(videoName + " yükleniyor...");
}
}
class AudioLoader {
public void loadAudio(String videoName) {
System.out.println(videoName + " ses dosyası yükleniyor...");
}
}
class SubtitleLoader {
public void loadSubtitles(String videoName) {
System.out.println(videoName + " altyazıları yükleniyor...");
}
}
// Facade Sınıfı
class VideoStreamingFacade {
private VideoLoader videoLoader;
private AudioLoader audioLoader;
private SubtitleLoader subtitleLoader;
public VideoStreamingFacade() {
this.videoLoader = new VideoLoader();
this.audioLoader = new AudioLoader();
this.subtitleLoader = new SubtitleLoader();
}
public void playMovie(String videoName) {
videoLoader.loadVideo(videoName);
audioLoader.loadAudio(videoName);
subtitleLoader.loadSubtitles(videoName);
System.out.println(videoName + " oynatılıyor...");
}
}
// Kullanım
public class Main {
public static void main(String[] args) {
VideoStreamingFacade streamingService = new VideoStreamingFacade();
streamingService.playMovie("Inception");
}
}
Çıktı:
Inception yükleniyor...
Inception ses dosyası yükleniyor...
Inception altyazıları yükleniyor...
Inception oynatılıyor...
Sonuç
Facade Design Pattern, bir sistemin karmaşıklığını gizleyerek istemci kodunun daha temiz ve yönetilebilir olmasını sağlar. Gerçek dünyada şu senaryolarda yaygın olarak kullanılır:
- E-ticaret sitelerinde sipariş, ödeme ve kargo işlemlerini yönetme
- Medya oynatma uygulamalarında video, ses ve altyazı yükleme işlemlerini tek noktadan yönetme
- Veritabanı işlemlerinde karmaşık sorguların tek bir arayüzden yürütülmesi
- API katmanlarında üçüncü taraf hizmetlerin entegrasyonunu basitleştirme
Facade Pattern sayesinde, istemci sistemin iç detaylarına bağlı kalmadan işlemleri yönetebilir ve böylece daha esnek ve bakımı kolay bir mimari elde edilebilir. 🚀