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