Adapter Design Pattern, uyumsuz farklı bileşenlerin birbirleriyle etkileşimde bulunabilmesini sağlamak için kullanılan bir tasarım desenidir.
Örnek olarak, bir ürün listesini XML, JSON ve CSV formatlarında dışa aktarmamız gerektiğini düşünelim.
Öncelikle, IProductsExporter adında bir arayüz oluşturalım ve ardından XmlProductsExporter ve JsonProductsExporter uyarlamalarını yapalım.
XML ve JSON export işlemlerini gerçekleştirdik fakat CSV export işlemini henüz tamamlamadık. Çünkü projede CSV oluşturan aşağıdaki gibi bir helper sınıfa sahibiz ve bu sınıf projenin farklı yerlerinde kullanılıyor.
Dikkat ederseniz, IProductsExporter arayüzü, Export metotunda List<Product> tipinde bir parametre beklerken, CsvHelper ise GenerateCsv metotunda List<object> tipinde bir parametre alıyor. CsvHelper projenin farklı yerlerinde kullanıldığı için burada herhangi bir düzenleme yapamayız. Ayrıca, aynı kodu CsvProductsExporter içerisine kopyalayamayız çünkü kodu tekrarlayamayız. Bu noktada, Adapter Design Pattern, IProductsExporter ile CsvHelper'ı birbirleriyle etkileşimde bulunabilecek şekilde birleştirmemize yardımcı olur.
Adapter Design Pattern, temel olarak Adaptee, Adapter ve Target olmak üzere 3 öğeden oluşur.
Örneğimizde, CsvHelper Adaptee öğesini temsil eder, yani adapte edilmesi gereken sınıftır. CsvProductsExporterAdapter ise Adapter öğesini temsil eder, yani CsvHelper'ı adapte eden sınıftır. IProductsExporter ise Target öğesini temsil eder, yani Adapter'ın arayüzüdür.
Adaptör aşağıdaki gibi olacak.
Constructor'da adapte edilecek nesneyi alıyoruz ve Export metotunda gerekli dönüşümleri yaptıktan sonra sonucu geri dönüyoruz.
Kullanımı aşağıdaki gibi olacaktır.
Örnek koda aşağıdaki Github adresimden erişebilirsiniz.
Vesselam.
Yorum bırak
Yanıtla
Yanıtlamayı iptal et