از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
الگوی طراحی Singleton در پایتون
سرفصلهای مطلب
معرفی
در این مقاله به بررسی این موضوع خواهیم پرداخت الگوی طراحی Singleton، در پایتون پیاده سازی شده است.
با گذشت زمان، نرم افزار بیشتر برای حل مسائل خاص در حوزه های مختلف طراحی می شود. در حالی که تفاوت های زیادی در سطح کاربرد نرم افزار ما وجود دارد، برخی از جنبه های طراحی نرم افزار تا حد زیادی یکسان باقی می مانند. این جنبهها ممکن است برای همه نرمافزارهای موجود یکسان باقی نمانند، اما برای بسیاری از سناریوها صادق خواهند بود. بنابراین، یادگیری و درک آنها برای کمک به ما در ایجاد برنامه های انعطاف پذیر بسیار مفید خواهد بود.
این اولین مورد از یک سری در مورد است الگوهای طراحی در پایتون و الگوهای مختلفی که می توانیم برای ساختن نرم افزار از آنها استفاده کنیم.
الگوی طراحی چیست؟
یک الگوی طراحی یک رویکرد خاص برای حل یک مشکل تکراری در توسعه نرم افزار است و همچنین برای نشان دادن شیوه های خوب استفاده می شود. این کد واقعی نیست، اما نشان دهنده یک روش خاص برای سازماندهی کد برای تولید راه حل مورد نظر به روش توصیه شده است. این بدان معنی است که ما مجبور نیستیم به طور دقیق از الگوهای طراحی مجموعه برای همه کد خود پیروی کنیم، بلکه نیازهای خود را تجزیه و تحلیل کرده و بهترین الگوی طراحی را برای نیازهای خود اعمال کنیم.
الگوهای طراحی از انبوهی از تجربه در حل مشکلات در توسعه نرم افزار ناشی می شوند و برای تناسب با سناریوهای خاص آزمایش و آزمایش می شوند. دلیل دیگری برای یادگیری در مورد الگوهای طراحی این است که اگرچه یک الگو ممکن است برای یک سناریوی خاص کارایی نداشته باشد، اما می تواند مبنایی را ارائه دهد که بر اساس آن می توان راه حلی را فرموله کرد.
با این حال، همانقدر که الگوهای طراحی میتوانند به ما کمک کنند تا از موقعیتهای مختلف بیرون بیاییم، مهم است که وضعیت فعلی را ارزیابی کنیم و همه گزینههای موجود را قبل از پرش مستقیم به یک الگو بررسی کنیم، زیرا ممکن است راهحل بهتری وجود داشته باشد.
الگوهای طراحی به چند دسته کلی تقسیم می شوند، البته عمدتا الگوهای خلاقیت، الگوهای ساختاری و الگوهای رفتاری.
الگوهای خلاقیت
چندین جنبه از الگوهای طراحی وجود دارد که آنها را از یکدیگر متمایز می کند، از جمله پیچیدگی الگوی طراحی، سطح کاربرد در یک سیستم و میزان جزئیات.
الگوهای خلاقانه شامل آنهایی هستند که راه هایی را برای ایجاد اشیایی تعریف می کنند که به افزایش انعطاف پذیری و قابلیت استفاده مجدد کد در کل برنامه کمک می کند.
نمونه هایی از الگوهای آفرینشی عبارتند از الگوی سینگلتون، روش کارخانه، کارخانه انتزاعی، سازنده و نمونه اولیه الگوها
الگوی سینگلتون
تعریف
الگوی سینگلتون یک الگوی ایجادی رایج است که برای تعریف ایجاد یک نمونه واحد از یک کلاس در حالی که یک نقطه دسترسی سراسری واحد به آن شیء ارائه میکند، استفاده میشود.
این الگو تعداد اشیایی را که می توان از یک کلاس ایجاد کرد به یک شی منفرد محدود می کند که اغلب در یک برنامه به صورت سراسری به اشتراک گذاشته می شود.
انگیزه
این الگو معمولاً در ویژگی هایی اجرا می شود که به کنترل دسترسی به یک منبع مشترک مانند اتصال پایگاه داده یا یک فایل نیاز دارند. با اطمینان از اینکه یک کلاس فقط می تواند برای ایجاد یک نمونه واحد استفاده شود و ارائه یک نقطه دسترسی جهانی واحد، دسترسی به منبع مشترک محدود شده و یکپارچگی می تواند حفظ شود.
ایجاد نمونههای واحد همچنین کمک میکند تا اطمینان حاصل شود که برخی از جنبههای برنامههای ما نمیتوانند توسط کلاسهای دیگر بازنویسی شوند که منجر به کد ناامن یا ناکارآمد میشود. این همچنین به ما امکان میدهد به یک شیء در چندین نقطه از برنامههایمان دسترسی داشته باشیم، بدون ترس از اینکه ممکن است در نقطهای از برنامه ما بازنویسی شود.
به عنوان مثال، اتصالات پایگاه داده یک بار در برنامه های ما انجام می شود و از همان شیء برای انجام عملیات استفاده می شود روی پایگاه داده ما در سراسر برنامه. اگر بخشهای مختلف برنامه ما بتوانند اتصالات پایگاه داده خود را ایجاد کنند، ممکن است در طول زمان مشکلات یکپارچگی ایجاد شود، زیرا هر بخش سعی میکند به پایگاه داده دسترسی پیدا کند. روی خودشون
پیاده سازی
الگوی Singleton مستلزم آن است که نمونه سازی یک کلاس فقط به یک شی محدود شود. کنترل ایجاد شی با اجرای یک روش ایجاد که شی ایجاد شده را در a ذخیره می کند، به دست می آید ایستا رشته.
همه فراخوانیهای این روش ایجاد یا شی سینگلتون اصلی را برمیگرداند یا خطایی وجود یک شیء نمونهسازی شده را نشان میدهد. این از ایجاد بیش از یک شی برای کلاس ما جلوگیری می کند و خاصیت singleton را حفظ می کند.
یک تشبیه خوب از الگوی تک تن این است که یک کشور می تواند یک دولت واحد داشته باشد که دسترسی و عملیات در داخل کشور را کنترل می کند. هرگونه تلاش برای ایجاد حکومت دیگر ممنوع است.
ما می توانیم این قیاس حکومتی را در یک کلاس singleton به صورت زیر در پایتون پیاده سازی کنیم:
class SingletonGovt:
__instance__ = None
def __init__(self):
""" Constructor.
"""
if SingletonGovt.__instance__ is None:
SingletonGovt.__instance__ = self
else:
raise Exception("You cannot create another SingletonGovt class")
@staticmethod
def get_instance():
""" Static method to fetch the current instance.
"""
if not SingletonGovt.__instance__:
SingletonGovt()
return SingletonGovt.__instance__
در مثال خود، متغیری را تعریف می کنیم که شی واحدی را که باید نمونه سازی شود، نگه می دارد. سازنده ما بررسی می کند که آیا کلاس موجود وجود دارد یا خیر.
هنگام واکشی شی با استفاده از get_instance()
روش، بررسی می کنیم که آیا یک نمونه موجود موجود است یا خیر و آن را برمی گردانیم. اگر نه، یکی را ایجاد می کنیم و آن را برمی گردانیم.
ما SingletonGovt
در عمل:
government = SingletonGovt()
print(government)
same_government = SingletonGovt.get_instance()
print(same_government)
another_government = SingletonGovt.get_instance()
print(another_government)
new_government = SingletonGovt()
print(new_government)
وقتی اسکریپت خود را اجرا می کنیم، می بینیم که فقط یکی داریم SingletonGovt
نمونه ای که در یک نقطه از حافظه ذخیره می شود. هر گونه تلاش برای ایجاد یک دولت دیگر با استثنایی که ما مطرح می کنیم خنثی می شود:
مزایا و معایب
طرفداران
- الگوی Singleton تضمین می کند که فقط یک نمونه از کلاس ما وجود دارد و خطر رفتار غیر منتظره را در برنامه ما کاهش می دهد.
- از آنجایی که ایجاد کلاس توسط یک کلاس منفرد کنترل می شود، این انعطاف پذیری را ارائه می دهد زیرا فقط باید در یک کلاس و شی تغییرات ایجاد شود.
منفی
- کلاسی که با استفاده از الگوی singleton ایجاد شده است، این را نقض می کند اصل مسئولیت واحد از آنجایی که ممکن است کلاس مجبور باشد در یک زمان معین بیش از یک مسئولیت را انجام دهد.
- مدیریت چرخه حیات میتواند مشکلاتی را در زمینههای دیگر مانند آزمایش ایجاد کند، زیرا کلاس singleton در طول عمر برنامه زنده نگه داشته میشود و موارد مختلف آزمایش ممکن است به نسخههای جدید کلاس نیاز داشته باشند.
نتیجه
در این پست به معرفی، بحث و پیاده سازی الگوی طراحی Singleton پرداخته ایم.
درست مانند هر الگوی طراحی دیگری، مزایا و معایب خود را دارد و اگرچه ممکن است برای برخی شرایط مناسب باشد، ممکن است برای همه نیازهای توسعه ما اعمال نشود. بنابراین این به ما بستگی دارد که مشکل مورد نظر را تجزیه و تحلیل کنیم و تصمیم بگیریم که آیا الگوی تک تن کار ما را آسانتر میکند یا خیر.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-17 16:35:03