آموزش الگوی طراحی(Design Pattern)پترن بازدید کننده (Visitor Pattern)

گروه نرم افزاری هیلتن
گروه نرم افزاری هیلتن
98 بار بازدید - 15 ساعت پیش - پترن میانجی(Visitor Pattern) - الگوی
پترن میانجی(Visitor Pattern) - الگوی طراحی آموزش الگوی طراحی(Design Pattern)پترن میانجی (Visitor Pattern) الگوهای طراحی(Design patterns) دیزاین پترن . تعریف الگوی میانجی(Visitor Pattern):فرض کنید عملیاتی داشته‌ باشیم که قرار باشد روی تعدادی از اشیا اجرا شود، اما هر شی آن را به شکل متفاوتی انجام دهد. یک راه این است که عملیات را به صورت مجزا در هر کلاس پیاده‌سازی کنیم. اما در این حالت اجرا کردن آن به ازای همه‌ی اشیا کار سختی خواهد بود [13]. یک راه دیگر این است که متدهای مربوط به این عملیات را از کلاس همه‌ی اشیا بیرون بکشیم و در قالب یک کلاس دیگر تعریف کنیم. سپس در یک حلقه‌ای نمونه‌ای از این کلاس را به هر شی بدهیم. پس از آن هر شی می‌تواند متد مربوط به خودش را در این شی فراخوانی کند. در این حالت اگر عملیات مزبور به دستکاری نیاز داشته باشد، تنها کلاس بیرونی باید اصلاح شود و کلاس هیچ یک از اشیا تغییر نخواهد کرد. این ایده‌ی الگوی Visitor است [12]. در واقع این روش مانند این است که به عنوان طراح یک آپارتمان 40 واحدی، به دلیل کوچک بودن واحدهای مسکونی، برای صرفه‌جویی در فضا تصمیم بگیریم ماشین لباس‌شویی هریک از واحدهای مسکونی را از آشپزخانه‌ی آن خارج کرده و به فضای بزرگی که برای همه‌ی ماشین‌های لباس‌شویی در زیرزمین ساختمان اختصاص داده‌ایم، منتقل کنیم. هر فردی هنوز ماشین لباس‌شویی خودش را دارد و لباس‌های خودش را هم در ماشینش می‌گذارد. اما در عین حال از خالی شدن بخشی از فضای آشپزخانه‌اش لذت می‌برد. الگوی Visitor مدلی فراهم می‌کند که توسط آن بتوانید عملیاتی را به شکل منسجم روی تعدادی از اشیا مختلف و ناهمگون اجرا کنید. در این مدل، به جای این که درون هر کلاس متد جداگانه‌ای برای آن پیاده‌سازی کنیم، همه‌ی متدها را از کلاس آن‌ها بیرون کشیده و در یک کلاس مرکزی به اسم Visitor تعریف می‌کنیم. سپس هنگام پردازش لیست اشیا، یک نمونه از این کلاس را به هریک از آن‌ها پاس می‌دهیم. هر کدام از اشیا نیز متد خودش را می‌شناسد و همان را روی Visitor صدا می‌زند. بدین ترتیب عملیات برای او انجام می‌شود [7]. مزیت این روش این است که اگر عملیاتی نیاز به تغییر داشته باشد، تنها کافی است Visitor دستکاری شود و هیچ یک از کلاس‌ها نیازی به تغییر ندارد. همچنین می‌توانید هر تعداد Visitor دیگری که بخواهید نیز تعریف کنید و به جای Visitor قبلی به کار ببرید. باز هم بدون آن که نیازی به دستکاری کلاس اشیا باشد، می‌توانید عملیات دیگری را روی همه‌ی آن‌ها اجرا کنید [7,12]. بنابر گفته GoF هدف از الگوي Visitor عبارت است از : "ارائه عملیاتی که کار خاصی را بر روی مجموعه اشیا انجام دهد و اجازه می‌دهد که شما یک متد به کلاس‌ها، بدون تغییر آن‌ها اضافه کنید. " هدف از این الگو: جدایی ساختمان داده از منطق عملیاتی نقش کلاس‌ها : • Visitor : یک واسط برای تمامی کلاس های visitor می‌باشد که دستوراتی برای سرکشی به اشیا ارائه می‌دهد. • ConcreteVisitor : پیاده‌سازی دستورات Visitor . • Element : تعریف عمل Accept برای قبول کردن Visitor به عنوان پارامتر. • ConcreteElement : پیاده‌سازی عمل Accept که یک visitor به عنوان آرگومان دریافت می‌کند. • ObjectStructure : کلاسی است که شامل تمام اشیایی می‌باشد که می توانند visit شوند. این مجموعه اشیا ممکن است به صورت Composite یا به صورت List باشند. زمانی از این الگو استفاده کنید که : • بخواهیم عملیات مشابه را بر روی مجموعه‌ای از اشیا که دارای انواع مختلفی هستند، انجام دهیم. • نیاز باشد تعدادی عملیات غیرمرتبط برروی این کلاس‌ها انجام شود. در واقع این الگو اجازه می‌دهد که یک کلاس visitor جداگانه برای هر عمل ایجاد کنیم. • قصد داشته ‌باشیم عمل جدیدی را بر روی تمامی عناصر یک ساختار موجود تعریف و اجرا کنیم بدون این که کلاس‌های آن را جایگزین کنیم. مزایای این الگو : • تعریف Visitor جدید ساده است و نیازی نیست به سورس کلاس‌های ConcreteElement دسترسی داشته یا آن‌ها را دستکاری کنیم. • عملیات مرتبط با هم را کنار هم قرار مي‌دهد. • هنگام اجرا به سادگی می‌توانیم Visitorهای مختلفی را روی مجموعه اشیا اجرا کنیم. معایب این الگو : • افزودن Element جديد دشوار است. چون به ازاي هر Element بايد عملیات لازم هم در Abstract Visitor و هم در کليه Concrete Visitor ها اضافه شوند. • بین کلاس‌های ConcreteElement و Visitor اتصالی بسیار محکم و قوی وجود دارد. • به‌طور کلي از این الگو، زماني استفاده می‌شود که کلاس‌هاي اصلي به ندرت تغيير مي‌کنند، اما لازم است در طول زمان عملیات جديدي به آن‌ها اضافه شود. اگر خود کلاس تغييراتش زياد است، بهتر است از اين Pattern استفاده نشود و عملیات در خود کلاس پياده شوند. چگونه برنامه نویسی را شروع کنیم ؟ -هیلتن دانلود کامل این پکیچ از وبسایت. www.heilton.com/ لطفا در کانال یوتیوب ماهم عضو شوید : 👇👇👇👇👇👇👇👇    / @گروهنرمافزاریهیلتن   اگه خواستید به کانال تلگرامی ما هم یه سری بزنید : t.me/HeiltonProgramming و هم چنین گروه تلگرامی ما :t.me/joinchat/VnroNrh2Qglqse8h
15 ساعت پیش در تاریخ 1403/07/08 منتشر شده است.
98 بـار بازدید شده
... بیشتر