الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی Visitor را معرفی کنیم.
الگوی طراحی Visitor یک الگوی طراحی رفتاری(behavioral) است که به شما امکان می دهد رفتار شئ را از ساختار شئ جدا کنید. این الگو زمانی مفید است که شما یک ساختار شئ پیچیده دارید و می خواهید عملیات جدیدی را بدون تغییر خود اشیا به آن اضافه کنید.
الگوی Visitor از اجزای زیر تشکیل شده است:
در ادامه مثالی از نحوه پیاده سازی الگوی Visitor در سی شارپ قرار گرفته شده است:
// Visitor interface
public interface IVisitor
{
void Visit(ElementA element);
void Visit(ElementB element);
}
// Concrete Visitor
public class ConcreteVisitor : IVisitor
{
public void Visit(ElementA element)
{
// Perform some operation on ElementA
}
public void Visit(ElementB element)
{
// Perform some operation on ElementB
}
}
// Element interface
public interface IElement
{
void Accept(IVisitor visitor);
}
// Concrete Element
public class ElementA : IElement
{
public void Accept(IVisitor visitor)
{
visitor.Visit(this);
}
}
// Concrete Element
public class ElementB : IElement
{
public void Accept(IVisitor visitor)
{
visitor.Visit(this);
}
}
// Object Structure
public class ObjectStructure
{
private List<IElement> elements = new List<IElement>();
public void AddElement(IElement element)
{
elements.Add(element);
}
public void RemoveElement(IElement element)
{
elements.Remove(element);
}
public void Accept(IVisitor visitor)
{
foreach (var element in elements)
{
element.Accept(visitor);
}
}
}
در این مثال، یک کلاس Visitor ساده داریم که دو رفتار مختلف برای دو نوع Element تعریف کرده است. همچنین هر کدام از Element ها در متد Accept خود، متد Visit مربوط به Visitor را فراخوانی کرده اند.
در کلاس ObjectStructure لیستی از Element ها داریم که با استفاده از متد Accept موجود در ObjectStructure فراخوانی میشوند. با فراخوانی متد Accept هر Element بر اساس پیاده سازی خاصی که برای آن انجام شده است، عمل میکند.
با بکارگیری از این الگو می توانید به یک طراحی انعطاف پذیر و توسعه پذیر دست پیدا کنید که اضافه کردن عملیات جدید به ساختار شی های موجود را آسان میکند. الگوی Visitor جداسازی تمیزی بین رفتارها و ساختار ها ایجاد میکند. این الگو کد شما را ماژولار میکند و نگهداری آن در طول زمان آسانتر میشود.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه