گروه نرم افزاری هیلتن

مهندسی نرم افزار: الگو های طراحی Design Patterns

الگوی طراحی Visitor

Visitor Design Pattern



جداکردن داده ها از الگوریتم های که روی داده ها باید انجام شود باعث به وجود آمدن Loos capping می شود.الگوی Visitor داده ها را از الگوریتم و متد ها جدا می کند تا بدونه دانستن ساختار داده ها به داده ها دسترسی داشته باشیم. این الگو زمانی استفاده می شود که کلکسیونی از داده داشته باشیم و قرار باشد متدی بر روی این کلکسیون بدونه دانستن ساختار داده کار کند. این الگو دارای متد های همچون Attach وdetach برای مدیریت کلکسیون داده ها می باشد. برای مثال یک سیستم با چند زیرسیستم را در نظر بگیرید که می خواهیم به صورت دوره این زیر سیستم ها را بررسی کنیم.

هدف

ساده سازی انجام یک عملیات برروی مجموعه ای از اشیا که مفهوم و ماهیت آن عملیات به طور کلی ثابت است.

انگیزه

فرض کنید عملیاتی داشته باشید که قرار است روی مجموعه ای از اشیا اجرا گردد. اما هر شی آن شکل متفاوتی دارد.

کاربرد

• انجام دادن عملیات یکسان روی اشیای متفاوت

• نیازی به دسترسی فیلد های خصوصی برای انجام عملیات نباشد

ساختار

در زیر نمودار کلاس دیاگرام این الگو را مشاهده می کنیم.

نمودارکلاس دیاگرام الگوی طراحی Visitor
اجزا

Visitor: کلاسی که ساختار کلی ویزیتور ها را مشخص می کند.

Concrete Visitor: کلاسی که یک ویزیتور را پیاده سازی می کند.

Element: کلاسی که ساختار کلی اشیای را مشخص می کند. کلاسی که مشخص می کند برای دریافت یک ویزیتور چه چیزی را باید داشته باشیم.

Concrete Element: کلاس های اشیای موجود در این الگو هستند.

Object Structure: یک ساختار داده ای که شامل مجموعه ای از اشیای مختلف است.

پیامد

1- این الگو صحبتی در باره ی چگونگی پیمایش اشیا موجود در ساختار را نمی کند

2- اگر پیمایش را خود ویزیتور انجام بدهد انتخاب مناسبی نیست. ولی این کار راObject Structure انجام دهد انتخاب مناسبی است.

نقات قوت:

• جدا کردن عملیات قابل اجرا از کلاس ها باعث می شود کلاس ها سبک تر و نمونه سازی از آن ها سریع تر باشد.

• تعریف ویزیتور جدید ساده است.

• در زمان اجرا می توان ویزیتور ها را انتخاب و اجرا نمود.

نقاط ضعف:

• از انجای که بخشی از کلاس را جدا در داخل کلاسی دیگر طراحی می کنیم. مجبور هستیم بخشی از کلاس را برای اشیای دیگر قابل مشاهده کنیم که این برخلاف قانون پنهان سازی است.

• بین کلاس های ویزیتور و Element وابستگی محکمی وجود دارد که البته این را نمی توان ضعف در نظر گرفت.







گروه برنامه نویسی هیلتن

گروه برنامه نویسی هیلتن