معرفی الگوی طراحی Visitor

معرفی الگوی طراحی Visitor

مدت مطالعه : 3 دقیقه

18 اردیبهشت 1402

الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرم‌افزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفه‌جویی در زمان و تولید کد های با کیفیت، توسعه‌پذیر و انعطاف‌پذیر استفاده می‌کنیم. در این مطلب قصد داریم الگوی طراحی Visitor را معرفی کنیم.

الگوی طراحی Visitor یک الگوی طراحی رفتاری(behavioral) است که به شما امکان می دهد رفتار شئ را از ساختار شئ جدا کنید. این الگو زمانی مفید است که شما یک ساختار شئ پیچیده دارید و می خواهید عملیات جدیدی را بدون تغییر خود اشیا به آن اضافه کنید.

 

الگوی Visitor از اجزای زیر تشکیل شده است:

  • Visitor: این رابط(Interface) شامل متد هایی است که بر روی Element های مختلف اجرا می‌شود. 
  • Concrete Visitor: کلاسی است که رابط Visitor را پیاده سازی می کند.
  • Element: رابطی است که اجزاء مختلف باید آن را پیاده سازی کنند. متد Accept در این رابط معرفی می‌شود که به وسیله آن میتوان دستورات Visitor را اجرا کرد.
  • Concrete Element: کلاسی است که رابط Element را پیاده سازی می کند و نحوه فراخوانی دستورات Visitor در متد Accept را پیاده سازی می‌کند.
  • Object Structure: کلاسی است که مجموعه ای از Element ها را در خود نگهداری می‌کند. این کلاس می‌تواند با دریافت یک Visitor، رفتار آن را بر روی لیست Element ها اعمال کند.

در ادامه مثالی از نحوه پیاده سازی الگوی 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 جداسازی تمیزی بین رفتارها و ساختار ها ایجاد می‌کند. این الگو کد شما را ماژولار می‌کند و نگهداری آن در طول زمان آسان‌تر می‌شود.

برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همه‌ی الگو های طراحی می‌شود، برای شما قرار گرفته است.

design patterns

ایجاد کننده (Creational):الگوی طراحی Factory 
الگوی طراحی Builder 
الگوی طراحی Singleton 
الگوی طراحی Prototype 
الگوی طراحی Abstract Factory 
ساختاری (Structural):الگوی طراحی Adapter 
الگوی طراحی Bridge 
الگوی طراحی Composite 
الگوی طراحی Decorator 
الگوی طراحی Facade 
الگوی طراحی Flyweight 
الگوی طراحی Proxy 
رفتاری (Behavioral):الگوی طراحی Chain of Responsibility 
الگوی طراحی Command 
الگوی طراحی Interpreter 
الگوی طراحی Mediator 
الگوی طراحی Memento 
الگوی طراحی Observer 
الگوی طراحی State 
الگوی طراحی Strategy 
الگوی طراحی Template Method 
الگوی طراحی Visitor 
الگوی طراحی Iterator 
  • اشتراک گذاری:
محمدرضا باباخانی
محمدرضا باباخانی

من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که می‌نویسم بدردتون بخوره.

آخرین مطالب

سرویس مش؛ ساده سازی ارتباطات میکروسرویس و افزایش رؤیت پذیری

در چشم انداز همیشه در حال تحول توسعه نرم افزار، معماری میکروسرویس ها به دلیل مقیاس پذیری، انعطاف پذیری و توسعه پذیری محبوبیت قابل توجهی به دست آورده است. با این حال، با افزایش تعداد میکروسرویس ها در یک برنامه، مدیریت ارتباطات آنها و اطمینان از رؤیت صحیح همه آنها به طور فزاینده ای چالش برانگیز می شود. اینجاست که سرویس مش وارد عمل می شود.

اهمیت محاسبات لبه یا Edge Computing

ا توجه به سرعت تحول فناوری، یکی از مفاهیمی که توجه زیادی را به خود جلب کرده و نحوه تعامل ما با سیستم های دیجیتال را تغییر می دهد، محاسبات لبه (Edge Computing) است.

معماری رویداد محور چیست؟

معماری رویداد محور (EDA) یک الگوی طراحی نرم افزار است که در توسعه نرم افزار های مدرن به طور چشمگیری محبوب شده است. در این معماری، جریان داده ها با وقوع رویدادها تعیین می شود. بر خلاف سیستم های متمرکز سنتی که دائماً در حال بررسی وضعیت جدید هستند. معماری رویداد محور به ویژه برای سیستم هایی مفید است که به پردازش حجم زیادی از داده ها بصورت بلادرنگ(real-time) نیاز دارند.

ثبت دیدگاه