نکات کلیدی
1. الگوهای طراحی: راهحلهای قابل استفاده مجدد برای مشکلات رایج
الگوهای طراحی راهحلهایی را که در طول زمان توسعه و تکامل یافتهاند، ثبت میکنند.
ثبت تخصص طراحی. الگوهای طراحی تنها مفاهیم نظری نیستند؛ بلکه راهحلهای عملی هستند که از تجربیات واقعی توسعه نرمافزار به وجود آمدهاند. این الگوها تکنیکهای اثباتشدهای را برای حل چالشهای طراحی مکرر در سیستمهای شیءگرا ارائه میدهند.
چهار عنصر اساسی:
- نام الگو: ابزاری برای ارجاع و ارتباط آسان.
- مشکل: توصیف میکند که چه زمانی باید از الگو استفاده کرد.
- راهحل: عناصر، روابط و مسئولیتها را توصیف میکند.
- پیامدها: تبادلها و نتایج استفاده از الگو را مورد بحث قرار میدهد.
مزایای استفاده از الگوهای طراحی. با بهرهگیری از الگوهای طراحی، توسعهدهندگان میتوانند از اختراع مجدد چرخ پرهیز کنند و به جای آن بر روی راهحلهای مستقر و بهخوبی درکشده بنا کنند. این امر منجر به طراحیهای شیءگرای انعطافپذیر، زیبا و قابل استفاده مجدد میشود.
2. الگوهای خلاقانه: انتزاع ایجاد اشیاء
الگوهای خلاقانه به فرآیند ایجاد اشیاء مربوط میشوند.
جداسازی ایجاد اشیاء. الگوهای خلاقانه مکانیزمهایی را برای جداسازی کد مشتری از کلاسهای خاصی که ایجاد میشوند، فراهم میکنند. این انتزاع اجازه میدهد تا در ایجاد، ترکیب و نمایش اشیاء انعطافپذیری بیشتری وجود داشته باشد.
دامنه کلاس در مقابل دامنه شیء:
- الگوهای خلاقانه کلاس از وراثت برای تغییر کلاسی که ایجاد میشود استفاده میکنند.
- الگوهای خلاقانه شیء ایجاد را به شیء دیگری واگذار میکنند.
الگوهای خلاقانه کلیدی: کارخانه انتزاعی، سازنده، روش کارخانه، پروتوتایپ و سینگلتون. این الگوها رویکردهای مختلفی را برای مدیریت ایجاد اشیاء ارائه میدهند که هر کدام مجموعهای از تبادلها و مزایا را دارند.
3. الگوهای ساختاری: ترکیب کلاسها و اشیاء
الگوهای ساختاری به ترکیب کلاسها یا اشیاء میپردازند.
ساخت ساختارهای پیچیده. الگوهای ساختاری بر این تمرکز دارند که چگونه کلاسها و اشیاء میتوانند برای تشکیل ساختارهای بزرگتر و پیچیدهتر ترکیب شوند. این الگوها به مسائل ترکیب، سازگاری رابط و اشتراکگذاری مؤثر اشیاء میپردازند.
دامنه کلاس در مقابل دامنه شیء:
- الگوهای ساختاری کلاس از وراثت برای ترکیب رابطها یا پیادهسازیها استفاده میکنند.
- الگوهای ساختاری شیء از ترکیب اشیاء برای تحقق عملکرد جدید استفاده میکنند.
الگوهای ساختاری کلیدی: آداپتر، پل، ترکیبی، تزئینی، نمای، فلیوایت و پروکسی. این الگوها راهحلهایی برای ایجاد ساختارهای شیءگرا انعطافپذیر و قابل نگهداری ارائه میدهند.
4. الگوهای رفتاری: تعریف تعامل و مسئولیت اشیاء
الگوهای رفتاری ویژگیهای تعامل کلاسها یا اشیاء و توزیع مسئولیت را توصیف میکنند.
حاکمیت بر ارتباط اشیاء. الگوهای رفتاری به الگوریتمها و تخصیص مسئولیتها بین اشیاء مربوط میشوند. آنها نه تنها الگوهای اشیاء یا کلاسها را توصیف میکنند بلکه الگوهای ارتباط بین آنها را نیز بیان میکنند.
دامنه کلاس در مقابل دامنه شیء:
- الگوهای رفتاری کلاس از وراثت برای توزیع رفتار بین کلاسها استفاده میکنند.
- الگوهای رفتاری شیء از ترکیب اشیاء به جای وراثت استفاده میکنند.
الگوهای رفتاری کلیدی: زنجیره مسئولیت، فرمان، مفسر، تکرارکننده، میانجی، یادآور، ناظر، حالت، استراتژی، روش الگو و بازدیدکننده. این الگوها راهحلهایی برای مدیریت جریان کنترل پیچیده و تعاملات اشیاء ارائه میدهند.
5. الگوی ترکیبی: نمایش سلسلهمراتب جزء-کل
الگوی ترکیبی به مشتریان اجازه میدهد تا اشیاء فردی و ترکیبهای اشیاء را بهطور یکنواخت مدیریت کنند.
ترکیب بازگشتی. الگوی ترکیبی امکان ایجاد ساختارهای سلسلهمراتبی را با ترکیب اشیاء به صورت آرایشهای درختی فراهم میکند. این امر به مشتریان اجازه میدهد تا اشیاء فردی و ترکیبهای اشیاء را بهطور یکنواخت مدیریت کنند.
عناصر کلیدی:
- مؤلفه: رابط اشیاء در ترکیب را تعریف میکند.
- برگ: نمایانگر اشیاء برگ در ترکیب (بدون فرزندان) است.
- ترکیبی: رفتار مؤلفههایی که فرزندان دارند را تعریف کرده و مؤلفههای فرزند را ذخیره میکند.
مزایا: کد مشتری را ساده میکند، افزودن انواع مؤلفههای جدید را آسانتر میکند و سلسلهمراتب کلاسی شامل اشیاء اولیه و اشیاء ترکیبی را تعریف میکند.
6. الگوی استراتژی: محصور کردن الگوریتمها برای انعطافپذیری
الگوی استراتژی اجازه میدهد تا الگوریتم بهطور مستقل از مشتریانی که از آن استفاده میکنند، تغییر کند.
محصور کردن الگوریتم. الگوی استراتژی الگوریتمهای مختلف را در کلاسهای جداگانه محصور میکند و آنها را قابل تعویض میسازد. این امر اجازه میدهد تا الگوریتم بهطور مستقل از مشتریانی که از آن استفاده میکنند، تغییر کند.
عناصر کلیدی:
- استراتژی: رابط مشترک برای تمام الگوریتمهای پشتیبانیشده را اعلام میکند.
- استراتژی خاص: الگوریتم را با استفاده از رابط استراتژی پیادهسازی میکند.
- زمینه: با یک شیء استراتژی خاص پیکربندی شده و مرجع آن را حفظ میکند.
مزایا: جایگزینی برای زیرکلاسی ارائه میدهد، عبارات شرطی را حذف میکند و انتخابی از پیادهسازیها را فراهم میکند.
7. الگوی ناظر: ایجاد وابستگیها برای بهروزرسانیهای خودکار
یک وابستگی یک به چند بین اشیاء تعریف کنید تا زمانی که یک شیء وضعیت خود را تغییر میدهد، تمام وابستگان آن بهطور خودکار مطلع و بهروزرسانی شوند.
مکانیزم انتشار-اشتراک. الگوی ناظر یک وابستگی یک به چند بین اشیاء را تعریف میکند، جایی که یک موضوع، ناظران خود را از هرگونه تغییر در وضعیت خود مطلع میکند. این امر بهروزرسانیهای خودکار را ممکن میسازد و ثبات بین اشیاء مرتبط را حفظ میکند.
عناصر کلیدی:
- موضوع: ناظران خود را میشناسد و رابطی برای پیوستن و جدا کردن آنها فراهم میکند.
- ناظر: رابط بهروزرسانی برای اشیائی که باید از تغییرات یک موضوع مطلع شوند را تعریف میکند.
- موضوع خاص: وضعیت مورد علاقه اشیاء ناظر خاص را ذخیره کرده و هنگام تغییر وضعیت خود، به ناظران خود اطلاعرسانی میکند.
- ناظر خاص: مرجع یک شیء موضوع خاص را حفظ کرده، وضعیتی که باید با وضعیت موضوع سازگار باشد را ذخیره کرده و رابط بهروزرسانی ناظر را پیادهسازی میکند.
مزایا: جداسازی انتزاعی بین موضوع و ناظر، پشتیبانی از ارتباطات پخش و توانایی تغییر موضوعات و ناظران بهطور مستقل.
8. قدرت جداسازی ضعیف و انتزاع
به یک رابط برنامهنویسی کنید، نه یک پیادهسازی.
کاهش وابستگیها. جداسازی ضعیف و انتزاع از مضامین تکراری در الگوهای طراحی هستند. با حداقل کردن وابستگیها بین کلاسها و برنامهنویسی به رابطها به جای پیادهسازیهای خاص، سیستمها انعطافپذیرتر، قابل استفاده مجدد و قابل نگهداریتر میشوند.
مزایای جداسازی ضعیف:
- افزایش قابلیت استفاده مجدد کلاسها بهصورت مستقل.
- یادگیری، انتقال، اصلاح و گسترش یک سیستم آسانتر است.
- کاهش خطر تغییرات زنجیرهای زمانی که یک کلاس تغییر میکند.
تکنیکهای دستیابی به جداسازی ضعیف: جداسازی انتزاعی، لایهبندی و محصور کردن مفهومی که متغیر است. این تکنیکها در الگوهای طراحی مختلف برای ترویج سیستمهای با جداسازی ضعیف به کار میروند.
9. انتخاب و بهکارگیری مؤثر الگوهای طراحی
یک الگوی طراحی باید تنها زمانی بهکار گرفته شود که انعطافپذیری که فراهم میکند واقعاً مورد نیاز باشد.
کاربرد خاص زمینه. الگوهای طراحی نباید بهطور بیرویه بهکار گرفته شوند. آنها ابزارهایی هستند که باید زمانی که مشکل خاصی که به آن میپردازند، به وجود میآید، استفاده شوند. بهکارگیری یک الگو بدون درک واضح از مزایا و معایب آن میتواند منجر به پیچیدگی غیرضروری و کاهش عملکرد شود.
رویکردها برای یافتن الگوی مناسب:
- در نظر بگیرید که چگونه الگوهای طراحی مشکلات طراحی را حل میکنند.
- بخشهای نیت را مرور کنید.
- مطالعه کنید که چگونه الگوها با یکدیگر مرتبط هستند.
- الگوهای با هدف مشابه را مطالعه کنید.
- علت بازطراحی را بررسی کنید.
- در نظر بگیرید چه چیزی باید در طراحی شما متغیر باشد.
رویکرد مرحله به مرحله برای بهکارگیری یک الگوی طراحی: الگو را بخوانید، ساختار را مطالعه کنید، به کد نمونه نگاه کنید، نامهای معنادار انتخاب کنید، کلاسها را تعریف کنید، نامهای خاص کاربردی برای عملیاتها تعریف کنید و عملیاتها را پیادهسازی کنید.
10. الگوهای طراحی بهعنوان یک زبان مشترک و ابزار یادگیری
الگوهای طراحی یک واژگان مشترک برای طراحان فراهم میکنند تا برای ارتباط، مستندسازی و بررسی گزینههای طراحی استفاده کنند.
تقویت ارتباطات. الگوهای طراحی یک واژگان مشترک برای بحث و مستندسازی طراحیهای نرمافزاری فراهم میکنند. این امر به توسعهدهندگان اجازه میدهد تا بهطور مؤثرتری ارتباط برقرار کنند و سیستمهای موجود را راحتتر درک کنند.
بهبود مهارتهای طراحی. یادگیری الگوهای طراحی میتواند توسعه تخصص در طراحی شیءگرا را تسریع کند. آنها راهحلهایی برای مشکلات رایج ارائه میدهند و طراحان را در اتخاذ تصمیمات آگاهانه راهنمایی میکنند.
تکمیل روشهای موجود. الگوهای طراحی جایگزینی برای روشهای طراحی نیستند، بلکه یک مکمل ارزشمند هستند. آنها راهی برای توصیف بیشتر "چرا" یک طراحی و نه فقط ثبت نتایج تصمیمات شما فراهم میکنند.
آخرین بهروزرسانی::
نقد و بررسی
کتاب الگوهای طراحی بهعنوان یک اثر بنیادی در مهندسی نرمافزار شناخته میشود که مفهوم الگوهای طراحی را برای بهبود قابلیت استفاده مجدد و نگهداری کد معرفی میکند. در حالی که برخی از خوانندگان آن را خشک و قدیمی میدانند، بسیاری از آنها فهرست جامع الگوها و کاربردهایشان را ستایش میکنند. این کتاب بهعنوان خواندنی ضروری برای برنامهنویسان شیءگرا محسوب میشود و بینشهای ارزشمندی در حل مشکلات طراحی رایج ارائه میدهد. منتقدان اشاره میکنند که برخی الگوها ممکن است در زبانهای مدرن کمتر مرتبط باشند، اما اصول کلی همچنان اهمیت دارند. تأثیر این کتاب بر روی شیوههای توسعه نرمافزار بهطور گستردهای مورد تأیید قرار گرفته است.
Similar Books









