Menu
Coddy logo textTech

Adaptör Deseni

Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 95 / 110.

Adapter deseni, uyumsuz arayüzlerin birlikte çalışmasını sağlar. Aksi takdirde iş birliği yapamayacak iki sınıf arasında köprü görevi görür ve mevcut bir sınıfı, istemcilerin beklediği yeni bir arayüzle sarar. Bu, özellikle üçüncü taraf kitaplıkları veya eski kodu uygulamanıza entegre ederken kullanışlıdır.

JSON verileriyle çalışan bir sisteminiz olduğunu, ancak yalnızca XML çıktısı veren bir bileşeni entegre etmeniz gerektiğini düşünün. Her iki sınıfı da değiştirmek yerine, aralarında çeviri yapan bir adaptör oluşturursunuz:

// Sisteminizin beklediği mevcut arayüz
abstract class JsonData {
  String getJson();
}

// Uyumsuz arayüze sahip eski sınıf
class XmlService {
  String getXml() {
    return '<data><name>John</name></data>';
  }
}

// Adapter, XmlService'i JsonData ile uyumlu hale getirir
class XmlToJsonAdapter implements JsonData {
  final XmlService _xmlService;

  XmlToJsonAdapter(this._xmlService);

  @override
  String getJson() {
    String xml = _xmlService.getXml();
    // XML'i JSON'a dönüştür (basitleştirilmiş)
    return '{"name": "John"}';
  }
}

void main() {
  var xmlService = XmlService();
  var adapter = XmlToJsonAdapter(xmlService);

  print(adapter.getJson());  // {"name": "John"}
}

XmlToJsonAdapter, XmlService'i sarar ve JsonData arayüzünü uygular. İstemci kodu, verilerin başlangıçta bir XML kaynağından geldiğini bilmeden tanıdık JsonData arayüzüyle çalışır. Adaptör, tüm çeviriyi kendi içinde gerçekleştirir.

Mevcut bir sınıfı kullanmak istediğinizde ancak arayüzü ihtiyaçlarınıza uymadığında veya uyumsuz arayüzlere sahip sınıflarla iş birliği yapan yeniden kullanılabilir bir sınıf oluşturmanız gerektiğinde Adapter desenini kullanın.

challenge icon

Görev

Kolay

Bir medya oynatıcı adaptör sistemi oluşturalım! Tüm medya kaynaklarının sesi standart bir arayüz üzerinden sağlamasını bekleyen modern bir ses sisteminiz olduğunu, ancak ses üretme yöntemi tamamen farklı olan eski tarz bir plak çaları entegre etmeniz gerektiğini düşünün.

Adaptör kalıbı uygulamanızı düzenlemek için iki dosya oluşturacaksınız:

  • media_adapter.dart: Bu dosya, arayüzünüzü ve adaptör sınıflarınızı içerir. Modern sisteminizin beklediği soyut bir AudioSource sınıfı tanımlayın; bu sınıf, ses çıktısını bir dize olarak döndüren String playAudio() yöntemine sahip olmalıdır. Ardından eski ekipmanı temsil eden bir VinylPlayer sınıfı oluşturun; bu sınıf bir trackName alanına ve String spinRecord() değerini döndüren *crackle* Playing vinyl: [trackName] *crackle* yöntemine sahip olmalıdır. Son olarak VinylAdapter uygulayan ve bir AudioSource saran bir VinylPlayer oluşturun. Adaptörün playAudio() yöntemi, plak çaların spinRecord() yöntemini çağırmalı ve sonucu döndürmelidir; böylece uyumsuz arayüzler birbirine bağlanır.
  • main.dart: Medya adaptörü dosyanızı içe aktarın ve adaptörün eski plak çaların modern AudioSource arayüzünü bekleyen kodla çalışmasını nasıl sağladığını gösterin. Parça adı VinylPlayer olan bir Bohemian Rhapsody oluşturun. Ardından bu plak çaları saran bir VinylAdapter oluşturun. Beklenen arayüze uyduğunu kanıtlamak için adaptörü AudioSource türündeki bir değişkende saklayın. Ses kaynağınızda playAudio() çağrısı yapın ve sonucu yazdırın.

Bu kalıbın güzelliği, ana kodunuzun standart AudioSource arayüzüyle çalışmasıdır; perde arkasında işi aslında eski bir plak çaların yaptığını bilmesine gerek yoktur!

Beklenen çıktı:

*crackle* Playing vinyl: Bohemian Rhapsody *crackle*

Kendin dene

import 'media_adapter.dart';

void main() {
  // TODO: "Bohemian Rhapsody" parça adıyla bir VinylPlayer oluştur
  
  // TODO: Vinil oynatıcıyı saran bir VinylAdapter oluştur
  
  // TODO: Adaptörü AudioSource tipinde bir değişkende sakla
  
  // TODO: Ses kaynağında playAudio() çağır ve sonucu yazdır
  
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Dart derleyicisi