اعترافات آقای Singleton

رویکردهای گوناگونی برای آموزش برنامهنویسی وجود دارند. یکی از این رویکردها شیوهای است که در مجموعه کتابهای Head First دنبال میشود. مجموعهای که تلاش میکند برنامهنویسی را از شیوهی مرسوم آکادمیک خود خارج نموده و آنرا گاهاً با مطالب جذاب، طنز و تلفیقی از تصاویر کلاسیک همراه سازد. نوشتهی زیر بخشی از کتاب Head First Design Patterns اثر مشترک Eric Freeman و Elisabeth Freeman میباشد که با کمی تغییرات به زبان محاورهای ترجمه گردیده است. مبحث الگوهای طراحی یا Design Patterns یکی از مباحث شاید کمی دشوار در مهندسی نرمافزار به شمار بیاید. در این بخش از کتاب (فصل پنجم صفحهی 174) تلاش شده Singleton Pattern بصورت کلی در قالب یک مصاحبهی طنزآمیز مطرح گردد.
مصاحبهی این هفته: اعترافات آقای Singleton
مجری: سلام دوستان عزیز. باز هم با برنامهی دیگری از مجموعهی “الگوهای طراحی” در خدمت شما هستیم. امروز میخواهیم مصاحبهای با یک شی یگانه داشته باشیم. این شما و این هم آقای Singleton. خوب، چطوره مصاحبه رو با معرفی خودتون شروع کنید. بفرمایید.
آقای Singleton: سلام. حرف زیادی واسه گفتن ندارم، من تقریباً میشه گفت منحصر به فردم و تنها یه دونه از من وجود داره!
مجری: ببخشید؟؟؟
آقای Singleton: بله، یکی. من مطابق الگوی یگانه (Singleton Pattern) هستم که خاطر جمع میشیم در آن واحد، فقط یک شی از من وجود داره.
مجری: خیلی عذر میخوام اما فکر نمیکنی این یهجورایی وقت تلفکردن باشه؟ یه نفر کلی زمان میذاره تا یه کلاس کامل رو توسعه بده و حالا کل چیزی که به دست میاریم یه دونه شی از اونه؟
آقای Singleton: آهان، اینجا به قدرت تنهابودن پی میبریم. بذار اینجوری بهت بگم، اگر فرض کنیم یهدونه شی داشته باشی که یهسری تنظیمات رجیستری داخلش باشه، شما چندتا کپی از اون شی نمیخواهی و همینطور مقادیری که اطرافش هست میتونه به هرج و مرج منجر بشه. حالا با استفاده از یهدونه شی مثل من مطمئنی که همهی اشیا برنامهات، از یک منبع سراسری یکسان استفاده میکنند.
مجری: بیشتر توضیح بده.
آقای Singleton: عرضم به حضورت که من واسه همهچیز مناسبم. تک و تنهابودن بعضی اوقات مزایای خودش رو داره. من اغلب واسه مدیریت استخرهای منابع استفاده میشم. مثل کانکشن یا استخر نخها.
مجری: هنوز هم یهنوع ازت؟ یهجورایی تنهایی به حساب نمیاد؟
آقای Singleton: درسته که تنهایی بد دردیه اما چونکه فقط یهدونه از من وجود داره بیشتر وقتها مشغولم، اما چه خوب میشد اگه توسعهدهندههای بیشتری من رو میشناختند. خیلی از توسعهدهندگان بهخاطر کپیهایی از اشیایی که اطرافشون وجود داره و حتی روحشون هم ازشون خبر نداره، دچار باگ میشند.
مجری: حالا اگه ازت بپرسیم از کجا میدونی فقط یهدونه ازت وجود داره چی میگی؟ بذار ببینم، یه نفر میتونه با عملگر new یکی دیگه مثل خودت بسازه؟
آقای Singleton: نه عزیز من! من واقعاً منحصر به فردم. باورت نمیشه؟
مجری: خوب، صبر کن، یعنی توسعهدهندگان قسم میخورند که یهبار بیشتر ازت نمونهسازی نکنند؟
آقای Singleton: البته که نه.اگه بخوام راستش رو بهت بگم… میدونی، یه خورده خصوصیهها… آخه چه شکلی بگم…روم به دیوار… من سازندهی عمومی ندارم!
مجری: چی؟؟؟ سازندهی عمومی نداری؟ یعنی چی؟؟؟
آقای Singleton: درست شنیدی، سازندهی من خصوصی تعریف میشه.
مجری: چهجوری کار میکنه؟ اصلاً خودت چهشکلی نمونهسازی شدی؟
آقای Singleton: شما واسه دریافت یه شی یگانه نمونهسازی انجام نمیدی. فقط کافیه درخواست یهدونه شی بکنی. به این شکل که کلاس من یه متد استاتیک داره که بهش ()getInstance میگند. اون رو فراخوانی کنی من رو فوراً آماده به کار میبینی. ها ها ها. به همین سادگی. راستش ممکنه وقتی صدام میزنی اون موقع مشغول کمک به اشیا دیگه هم باشم.
مجری: جالبه. به حق حرفهای نشنیده! خوب، آقای Singleton به نظر میرسه واسه اینکه این کارها انجام بشه خیلی چیزهای دیگهای هم هست که تحت پوشش قرار میگیره. خیلی سوال دیگه هم هست که میخواستم بپرسم، اما از اتاق فرمان اشاره میکنند که وقتمون تمومه. به هر حال ممنون واسه اینکه وقتت رو به ما دادی. امیدوارم به زودی دوباره باهات صحبت کنیم.
آقای Singleton: خواهش می کنم. اختیار دارید. منم کمکم برم به کارهام برسم. فعلاً.