تمام سوالات سوالات بدون پاسخ سوال بپرسید

سلام به همه دوستان همکدی،
من در مورد Singleton این رو میدونم که از یک کلاس یک شی درست میکنه و این شی بصورت سراسری برای همه کلاس ها قابل استفاده است.
حالا سوال من اینه که چرا باید از Singleton استفاده کنم نه از شی نوع Static ؟
شما در چه شرایطی استفاده از Singleton رو پیشنهاد می‌کنید؟

1

سلام دوست عزیز...سوالی مشابه در این مورد قبلا پرسیده شده است.لینکش رو براتون می ذارم شاید بتونه کمک کنه.آنچه من می تونم بگم اینه که در Singeleton یکتایی اهمیت داره و این یکتایی هست که مفهوم Singleton را بهش می دهد.
http://www.hamcodi.ir/qa/questions/216/singleton

(03 آوریل '12, 19:09) hamedkh ♦

Static هم یکتایی رو تضمین میکنه. راستی اون سوال رو دیدم البته جوابش درست بود ولی تعریف کلی Singleton رو میرسونه. من میخوام تفاوت Singleton با Static رو بدونم.

(04 آوریل '12, 10:11) _Ant Eater_
3 پاسخ

دو مفهوم کلاس static و الگوی singleton هر دو مشترکاتی دارند. بعضی از آنها به این ترتیب هستند:
1. از هیچ کدام نمونه سازی نمی شود و از یک نمونه مشترک در تمام برنامه استفاده می شود.
2. برای هر دو بدون نمونه سازی، فراخوانی صورت می گیرد.

اما تفاوت هایی هم میان آنها هست. برای نمونه استفاده از الگوی singleton می تواند این امکان را فراهم آورد که کلاس مورد نظر شما interface هایی را پیاده سازی کند یا از کلاسی ارث بری داشته باشد. اما یکی از محدودیت های اصلی استفاده از کلاس های static این است که شما نمی توانید هیچ interfaceی را پیاده سازی کنید یا از هیچ کلاسی غیر از Object ارث بری داشته باشید.
به نظر من در کاربردهای کوچک می توان از کلاس های static استفاده کرد اما اگر قرار باشد کمی بهتر و با آینده نگری کار کنیم (یا برای مثال از کلاسی ارث بری داشته باشیم) باید از الگوی singleton استفاده کنیم.


10

درصوتی که قصد شما فراخوانی چند تابع ساده باشد، تفاوتی با همدیگر ندارند. اما در عمل کلاس های استاتیک محدودیت های فراوانی دارند.

اصولا singleton چون یک شی از یک کلاس غیر استاتیک است، شما میتوانید به راحتی آن را به توابع مختلف پاس دهید و مانند متغییر با آن برخورد کنید.

کلاس های استاتیک نمیتوانند از کلاس های دیگر ارثبری داشته باشند. نمیتوانند اینترفیسی را Implement نمایند و یا کلاسی را گسترش دهند.

اما مهمترین دلیل استفاده از singleton به جای کلاس های استاتیک این است که کلاس های استاتیک توانایی پیاده سازی Polymorphism را ندارد و شما تنها محدود به داشتن یک کلاس با رفتار کاملا مشخص میباشید.

میتوان مثال های فراوانی از محدودیت های کلاس های استاتیک، آورد، به عنوان مثال: شما مایل هستید که یک فرم در برنامه ی ویندوزیتان تنها یک بار نمایش داده شود. این یکی از مثال های بسیار رایج از Singleton است. پنجره ها در ویندوزفرم ها از کلاس Form ارث میبرند. حال شما با تعریف یه الگوی singleton میتوانید کاری کنید که پنجره تنها یک بار ایجاد شود و هربار که کاربر فراخوانی نمود همان پنجره مجدد نمایش داده شود. اما توسط کلاس های استاتیک این کار تقریبا غیر ممکن است.

با تشکر فراوان دوست عزیز. نگفتید که من چه موقع بهتره از Static کمک بگیرم و چه موقع از Singleton.

(04 آوریل '12, 10:36) _Ant Eater_

کلاس های استاتیک و Singleton دو مقوله کاملا متفاوت هستند و هرکدام برای کاری متفاوت ایجاد شده اند. هرکدام برای کاری جدا هستند، شاید مقایسه ی این دو کار صحیحی نباشد. نهایت امکانات زبان های شی گرا در کلاس های غیر استاتیک آنهاست و درصورتی که شما از کلاس های استاتیک استفاده نمایید دیگر این امکانات را ندارید.

جالبه، میتونید بیشتر توضیح بدید؟

(04 آوریل '12, 10:28) _Ant Eater_
toggle preview



آموزش زبان برنامه نویسی C#
آموزش jquery
آموزش برنامه نویسی
آموزش طراحی وبسایت
آموزش مدیریت وبسایت
آموزش جاوا Java
آموزش پایتون Python
آموزش سی شارپ C#‎
آموزش HTML و CSS
آموزش JavaScript جاوااسکریپت
آموزش jQuery جی کوئری
آموزش ساخت ربات تلگرام
آموزش برنامه‌نویسی PHP
آموزش برنامه‌نویسی اندروید
● آموزش‌های رایگان

سوالات مرتبط

راهنمای استفاده از ویرایشگر
  • *ایتالیک*‌ یا __ایتالیک__
  • **ضخیم** یا __ضخیم__
  • آدرس:[متن](http://url.com/ "عنوان")
  • عکس?![alt متن](/path/img.jpg "عنوان")
  • لیست عددی: 1. Foo 2. Bar
  • برای رفتن به خط بعد، هر جا مایلید که خط جدید شروع شود دو کاراکتر فاصله (space) قرار دهید
  • تگ‌های ساده HTML هم پشتیبانی می‌شوند

تگها:
  • ×33
  • ×31
  • ×29
  • پرسیده شده: 03 آوریل '12, 13:46
  • بازدید: 3,761 بار
  • آخرین بروزرسانی: 04 آوریل '12, 10:36

این سوال را دنبال کنیدتوسط ایمیل: ایمیل شما (باید معتبر باشد, هرگز به دیگران نمایش داده نمیشود):

هنگامی که شما به سیستم وارد شوید،قادر خواهید بود برای بروز رسانی ها مشترک شوید.


توسط RSS:

پاسخها

پاسخها و نظرها