Visitor Tasarım Deseni

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda tasarım desenlerinden biri olan visitor tasarım desenini anlatacağım. Hadi başlayalım !
Table of Contents
Aslında bu tasarım deseni diğer tüm tasarım desenlerinde de olduğu gibi C# diline özgü bir kavram değil, tüm nesne yönelimli programlama dillerinde daha temiz kod yazabilmek için oluşturulmuş ve yazılımcılar tarafından da kabul görmüş yazılı olmayan kurallardır ve nesne yönelimli programlama yapılabilen tüm dillerde uygulanabilmektedir.
Visitor Tasarım Deseni Nedir?
Visitor tasarım deseni, nesne yapısını değiştirmeden yeni işlevselliği eklemek için kullanılan bir tasarım desenidir. Bu desen, bir nesne yapısının farklı tiplerine özgü işlevselliği yürütmek için kullanılır. Bunu yaparken, nesne yapısını değiştirmeden, yeni işlevselliği eklemek için kullanılan bir tasarım desenidir.
Örneğin, bir belgeyi temsil eden bir nesne yapısında, farklı türlerdeki belge öğelerine özgü işlevselliği eklemek isteyebilirsiniz. Bu işlevselliği, belge öğelerinin her biri için ayrı ayrı uygulayabilirsiniz, ancak bu durumda, nesne yapısını değiştirmeniz gerekir. Bu, bakımı zorlaştırabilir ve hata ayıklamayı zorlaştırabilir.
Bu sorunu çözmek için, Visitor tasarım deseni kullanabilirsiniz. Bu desen, belge öğeleri için özgü işlevselliği, bu öğelerin kendisine uygulamaktansa, bir “ziyaretçi” nesnesine uygulamanızı sağlar. Ziyaretçi nesnesi, farklı belge öğeleri için farklı işlevselliği içeren yöntemler içerir.
C# İle Uygulanması
Aşağıdaki C# kod örneği, Visitor tasarım desenini kullanarak bir belge nesne yapısında farklı türlerdeki öğeler için farklı işlevselliği uygulamak için nasıl kullanabileceğinizi göstermektedir:
// Belge öğesi arabirimi
interface IDocumentElement
{
void Accept(IVisitor visitor);
}
// Paragraf öğesi
class Paragraph : IDocumentElement
{
public string Text { get; set; }
public void Accept(IVisitor visitor)
{
visitor.Visit(this);
}
}
// Resim öğesi
class Image : IDocumentElement
{
public string Url { get; set; }
public void Accept(IVisitor visitor)
{
visitor.Visit(this);
}
}
// Ziyaretçi arabirimi
interface IVisitor
{
void Visit(Paragraph paragraph);
void Visit(Image image);
}
// Metin biçimlendirme ziyaretçisi
class TextFormattingVisitor : IVisitor
{
public void Visit(Paragraph paragraph)
{
// Paragraf metnini kalın yap
paragraph.Text = "<b>" + paragraph.Text + "</b>";
}
public void Visit(Image image)
{
// Resim etiketini ekleyin
image.Url = "<img src='" + image.Url + "' />";
}
}
// Belge sınıfı
class Document
{
private List<IDocumentElement> elements = new List<IDocumentElement>();
public void AddElement(IDocumentElement element)
{
elements.Add(element);
}
public void Accept(IVisitor visitor)
{
foreach (var element in elements)
{
element.Accept(visitor);
}
}
}
// Kullanım örneği
class Program
{
static void Main(string[] args)
{
Document document = new Document();
document.AddElement(new Paragraph() { Text = "Bu bir paragraf." });
document.AddElement(new Image() { Url = "image.jpg" });
TextFormattingVisitor textVisitor = new TextFormattingVisitor();
document.Accept(textVisitor);
// Paragraf metni kalın hale geldi
Console.WriteLine(((Paragraph)document[0]).Text);
// Resim etiketi eklendi
Console.WriteLine(((Image)document[1]).Url);
}
}
Yukarıdaki örnekte, bir belge nesne yapısında farklı türlerdeki öğeler için farklı işlevselliği uygulamak için Visitor tasarım desenini kullandık. IDocumentElement arayüzü, belge öğelerinin temel arayüzünü sağlar ve Accept() yöntemi, belge öğesi için ziyaretçi işlevselliğini çağırır.
Paragraph ve Image sınıfları, belge öğelerinin örnekleridir ve her ikisi de Accept() yöntemini uygular. TextFormattingVisitor sınıfı, belge öğeleri için metin biçimlendirme işlevselliği içeren ziyaretçi sınıfıdır.
Sonuç
Son olarak, Document sınıfı, belge öğelerinin koleksiyonunu ve Accept() yöntemini uygular. Program sınıfı, belge öğeleri oluşturur ve ziyaretçi işlevselliğini çağırmak için Document sınıfını kullanır.
Bu örnek, C# kodu kullanarak Visitor tasarım deseninin kullanımını göstermektedir. Bu desen, nesne yapısına yeni işlevselliği eklemek için etkili bir yöntemdir ve kodunuzun bakımını kolaylaştırabilir ve hata ayıklamayı daha kolay hale getirebilir.
Evet visitor tasarım deseni ve C# ile uygulanması bu şekilde olmakta. Tüm C# yazılarımıza buraya, diğer tasarım deseni yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.