به نام دانای بر حق
Design Pattern چیست؟
در مهندسی نرم افزار، الگوی طراحی نرم افزاری تعدادی راحل های تکراری برای مشکلاتی هستند که معمولا در طراحی نرم افزار اتفاق میوفتند، یک الگوی طراحی، طراحی را متوقف نمی کند،اما میتواند آن را مستقیم وارد کد های خود کنید.این یک توضیح و یا نمونه است برای اینکه متوجه شوید چطور مشکل خود را حل کنید اما میتوانید از راه حلهای متخلف استفاده کنید.
استفاده از Design Pattern
الگوهای طراحی میتوانند همراه با نمونههای تست شده به توسعه شما سرعت ببخشند، همانند نمونههای توسعه پایدار و ثابت شده. طراحی مؤثر یک نرمافزار با توجه به موضوع آنکه ممکن است تا لحظه آخر ساختار آن دیده نشود،استفاده از الگوهای طراحی کمک میکند تا از ظرافت هایی که ممکن است باعث مشکلات عمده شود جلوگیری شود و کد ها خوانایی بیشتری برای سایر برنامه نویسان و آشنایان با الگو وجود داشته باشد.
اغلب، مردم متوجه میشوند چگونه تکنیک های خاص را برای حل مشکلات خاص به کار ببرند،این تکنیک های به سختی اعمال میشوند و طیف وسیعی از مشکلات را همراه خود دارند. اما الگوهای طراحی راه حلهای عمومی را ارائه میکنند که در یک قالب مستند شده و نیازی به جزئیات گره خورده با مشکل خاص ندارد.
علاوه بر این، الگوهای طراحی به توسعه دهندگان اجازه این را میدهد که تا با «استفهام خوب» و دانستن نام های تعامل نرمافزار ارتباط برقرار کنند. الگو های طراحی مشترک میتواند موجب صرفه جویی در وقت و طراحی قوی تری نسبت به طرح های تک منظوره میشود.
الگوهای طراحی تکوینی ( ایجادی)
این دسته طرح های همگی مربوط نمونه سازی از کلاسها میشوند،این الگوها بیشتر میتواند به دو بخش:
۱) الگو های class-creation
۲) الگوهای object-creational
تقسیم شود.
زمانی که class-creation سعی در ارث بری می کن بر روی فرآیند نمونه سازی تأثیر گذار است.
الگوی object-creation از نمایندگان برای انجام و به سرانجام رساندن کار خود استفاده می کند.
- (Abstract factory) ساخت نمونه برای فامیلی های مرتبط
- (Builder) فرآیند ساخت یک شیء را از نمایش آن جدا کرده تا بتوان همان فرآیند ساخت را برای ایجاد نمایشهای مختلف بکار برد.
- (Factory method) یک رابط برای ساخت اشیاء تعریف کرده و در عین حال اجازه میدهد تا زیر کلاسها در مورد اینکه چه شیء را نمونه سازی کنند تصمیم بگیرند. در واقع این الگو اجازه میدهد تا نمونه سازی را به زیر کلاسها محول نمود.
- ( Object Pool ) اجتناب از کسب و انتشار منابع با ارزش با بازیافت اشیای دیگر که در حال استفاده اند.
- (Prototype) با استفاده از یک شیء بعنوان نمونه نوع اشیاء جدیدی که بایستی ساخته شوند را مشخص کرده و آن اشیاء را با ساختن کپیهای جدید از این نمونه ایجاد مینماید.
- (Singleton) این اطمینان را حاصل میکند که یک کلاس دارای تنها یک نمونه بوده و دسترسی به آن نمونه را تدارک میبیند.
الگوهای طراحی ساختاری
در این الگوها تمام کلاسها و آشیا ترکیبی می باشند، الگوی ساختاریclass-creation از ارث بری چندین interface استفاده می کند، الگوی ساختاری object-patterns روشی است برای ترکیب چند شی برای گرفتن یک عملکرد جدید می باشد.
- (Adapter) تطبیق Inteface (رابط) های کلاسهای گوناگون در یک
- (Bridge) یک مفهوم مجرد را از پیاده سازی اش مجزا کرده تا هردو بتوانند بطور مستقل تغییر کنند.
- (Composite) اشیاء را بصورت ساختار درختی برای ایجاد ساختار سلسله مراتبی بفرم part-whole ترکیب مینماید. این الگو اجازه میدهد تا توسعه دهنده اشیاء منفرد و مرکب را بصورت یکسانی پردازش کنند.
- (Decorator) در زمان اجرا وظایف جدیدی به یک شی ء اضافه میکند. این الگو بدیلی قابل انعطاف برای گسترش عملکرد یک کلاس بوسیله زیر کلاس ساختن از آن را فراهم میکند.
- (Facade) یک رابط منفرد برای مجموعهای از رابطها در یک زیر سیستم تدارک میبیند. در واقع یک facade رابط سطح بالاتری برای یک زیر سیستم تعریف کرده و باعث میشود تا زیر سیستم را بصورت ساده تری مورد استفاده قرار داد.
- (Flyweight) از اشتراک منابع برای فراهم نمودن تعداد زیادی از اشیاء سبک بصورت کارا استفاده میکند.
- (Private Class Data) برای محدود کردن دستیابی به دادههای داخل کلاس
- (Proxy) یک جانشین یا جایگاه برای کنترل دسترسی به یک شیء ایجاد میکند.
الگوی های رفتاری
این الگو به صورت کلی برای ارتباط بین اشیاء متعلق به کلاسها میباشد، الگو های رفتاری الگوهایی هستند که حساسیت خاصی برای ارتباط بین اشیاء دارند.
- (Chain of responsibility) با دادن شانس به بیش از یک شیء برای پاسخگویی به یک درخواست از در هم آمیختن فرستنده و دریافت کننده یک درخواست جلوگیری میکند. به این ترتیب که اشیاء دریافت کننده یک درخواست را بصورت زنجیرهای در نظر گرفته و درخواست را در طول این زنجیره عبور داده تا اینکه یکی از اشیاء آنرا پاسخ پوید.
- (Command) یک درخواست را بصورت یک شیء کپسول سازی میکند. بنابراین این امکان را فراهم میکند تا توسعهدهنده را با درخواستهای متفاوت پارامتردهی کرده، درخواستها را صف بندی یا Log کرده و اعمال قابل برگشت فراهم کنید.
- (Interpreter) برای یک زبان، نمایشی از گرامرش به همراه مفسری که از آن نمایش برای تفسیر جملات مربوط به آن زبان استفاده میکند تعریف مینماید.
- (Iterator) روشی برای دسترسی ترتیبی به عناصر یک شیء مجتمع (مرکب) بدون افشاء کردن نمایش آن فراهم میکند.
- (Mediator) شیءی که نحوه تبادلات مجموعهای از اشیاء را کپسول سازی میکند را تعریف مینماید. این الگو با پرهیز از ارجاعات مستقیم بین مجموعهای از اشیاء، اتصال حداقلی بین آنها را ترغیب نموده و اجازه میدهد تا تبادلات را بصورت مستقل تغییر دهید.
- (Memento) بدون شکستن کپسول سازی، حالت درونی یک شیء را تسخیر و ذخیره کرده تا آن شیء بتواند بعداً به آن حالت برگشت یابد.
- (Null Object) یک مقدار یا عمل پیشفرض برای یک شی در نظر میگیرد.
- (Observer) یک نوع وابستگی یک- به- چند بین اشیاء تعریف کرده بطوریکه وقتی یک شیء حالتش را تغییر داد تمام اشیاء وابسته به آن خبردار شده تا آنها خود را با آن تغییر هماهنگ کنند.
- (State) اجازه میدهد تا یک شیء هنگامیکه حالتش عوض شد رفتارش را تغییر دهد. اشیاء از این نوع رفتار کلاسی که در آن قرار دارند را تغییر میدهند.
- (Strategy) یک خانواده از الگوریتمها را تعریف؛ کپسول سازی و قابل جایگزین کردن میکند. استراتژی اجازه میدهد تا یک الگوریتم را بدون توجه به جائیکه مورد استفاده قرار میگیرد تغییر داد.
- (Template method) اسکلت یک الگوریتم را تعریف کرده و پیاده سازی بعضی قدمهای آنرا به زیر کلاسها محول میکند. این الگو امکان تغییر بعضی از قدمهای یک الگوریتم را بدون تغییر در ساختار کلی الگوریتم به زیر کلاسها میدهد.
- (Visitor) عملی که بایستی بر روی عناصر یک ساختار از اشیاء اعمال شود را نمایش میدهد. این الگو اجازه میدهد تا عمل جدیدی بدون نیاز به تغییر کلاسهای عناصری که بر روی آن عمل میکند را تعریف کنید.
انتقاد
مفهوم الگوهای طراحی توسط برخی در زمینه علوم کامپیوتر مورد انتقاد قرار گرفته است.
اشتباهات اهدافی
زمانی که الگو ارائه شده است، توسعهدهنده نیاز دارد که این الگو را متوجه شود و آن را پیادهسازی کند، صرفاً امکان پیادهسازی توسط کپی مطمئناً نمیتواند پاسخگویی پیادهسازی یک الگو باشد.اما اگر برخی چیزها کپی شود شاید کد نوشته شکل الگو را به خود نداشته باشد، در این مورد آقای Paul Graham نوشته ساده با نام Revenge of the Nerds دارد.
فاقد بنیانهای رسمی
مطالعات الگوهای طراحی به شدت ناپایدار بوده استُ، برخی اظهار داشتهاند که این اگو ها نیاز به این دارند که در یک جایگاه رسمی قرار گیرند.
امکان منجر شدن به راه حلهای ناکارآمد
تلاشها برای طراحی یک الگوی مناسب و استاندارد شده ممکن است در نگاه اول این استفاده از این الگو ها را بسیار مفید و کارآمد به نظر برسد.اما در عمل اغلب درک ناقص توسعهدهنده موجب این میشود که کدهای غیر ضروری و دوباره کاری بوجود بیاید، همیشه یک راه حلی بهتر برای حل کردن موضوع میباشد شاید در الگوهای نبایستی دنبال آن گشت و یا حداقل الگوی مناسبی انتخاب شود و برخی نیز معتقدند که الگو های با مفاهیم انتزاعی ارائه شده تفاوت بسیاری دارند.
به امید خدا سعی میشود اگر عجل رخصت بدهد تمام این الگو ها رو در آینده نه چندان دور تک به تک معرفی کنیم.
دیدگاهتان را بنویسید لغو پاسخ