EMZETT.
Giriş yap

Ziyaretçi (Visitor) deseni

Kısaca: Visitor deseni, bir işlemi üzerinde çalıştığı nesne yapısından ayırır; böylece sınıfları değiştirmeden yeni işlemler eklenebilir.

Biraz daha ayrıntılı: Her öğe bir accept(visitor) yöntemi sunar ve içinde visitor.visit(this) çağırır. Ziyaretçi, öğe türü başına uygun kodu tutar (“double dispatch”).

Ayrıntılı

  • Tipik örnek: Sayı, toplama, değişken gibi düğümlerden oluşan bir sözdizimi ağacı. Ziyaretçiler “değerlendir”, “yazdır”, “iyileştir”dir.
  • Avantaj: Yeni bir işlem = yeni bir ziyaretçi sınıfı, düğüm sınıflarına dokunmadan.
  • Dezavantaj: Yeni düğüm türleri tüm ziyaretçilerin değişmesini gerektirir. Desen, işlemler türlerden daha sık değiştiğinde karşılığını verir.
  • Alternatifler: Toplam türler üzerinde desen eşlemeli dillerde (Rust, Kotlin, TypeScript, modern Java) bir match çoğu zaman ziyaretçinin yerini alır.
  • Bilindiği yerler: Derleyiciler, dosya sistemi gezintileri, Python’da ast.NodeVisitor.

Ayrıca bak: Yineleyici deseni