الگوی طراحی Singleton، نمونه TypeScript

سینگلتون چیست؟
متن نوشته: Singleton یکی از الگوهای طراحی خلاقانه است
الگوی Singleton یک الگوی طراحی است که در برنامه نویسی استفاده می شود تا اطمینان حاصل شود که یک کلاس فقط یک نمونه دارد و یک نقطه دسترسی جهانی به آن نمونه را فراهم می کند. این زمانی مفید است که دقیقاً یک شیء برای هماهنگ کردن اقدامات در یک سیستم مورد نیاز باشد.
این الگو معمولاً شامل موارد زیر است:
- سازنده خصوصی: از نمونه سازی مستقیم کلاس از خارج جلوگیری می کند.
- Static Instance: نمونه واحد کلاس را نگه می دارد.
- روش ایستا: راهی برای دسترسی به نمونه ارائه می دهد و در صورتی که از قبل وجود نداشته باشد، آن را ایجاد می کند.
این تضمین می کند که مهم نیست که چند بار نمونه را درخواست کنید، همیشه همان شی را دریافت می کنید.
موارد استفاده خوب برای الگوی Singleton
1. تنظیمات پیکربندی:
برنامه ها اغلب به یک مکان متمرکز و واحد برای مدیریت تنظیمات پیکربندی نیاز دارند. Singleton تضمین می کند که تمام قسمت های برنامه به پیکربندی یکسانی دسترسی دارند.
2. ورود به سیستم:
یک سیستم لاگ باید متمرکز باشد تا تمام قسمت های یک برنامه در یک گزارش بنویسند. استفاده از سینگلتون تضمین می کند که تنها یک نمونه از لاگر وجود دارد.
3. اتصال به پایگاه داده:
مدیریت یک نمونه اتصال پایگاه داده واحد، استفاده کارآمد از منابع را تضمین می کند و از سربار باز کردن و بستن مکرر اتصالات جلوگیری می کند.
4. ذخیره سازی:
یک کش باید در سراسر برنامه قابل دسترسی و سازگار باشد. استفاده از singleton تضمین می کند که یک نمونه کش وجود دارد.
نمونه ای از الگوی Singleton در TypeScript
در اینجا کد پیاده سازی یک سینگلتون ساده آمده است:
class Singleton {
private static instance: Singleton;
private constructor() { }
public static getInstance(): Singleton {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
public doAction() {
console.log("action");
}
}
در اینجا نحوه استفاده از این کلاس آمده است:
const singleton1 = Singleton.getInstance();
const singleton2 = Singleton.getInstance();
// Outputs: true
console.log(singleton1 === singleton2);
// Outputs: 'action'
singleton1.doAction();
توضیح:
-
روش استاتیک getInstance: این روش استاتیک کلید کنترل دسترسی به نمونه Singleton است. اگر نمونه از قبل وجود نداشته باشد، آن را ایجاد می کند. اگر وجود داشته باشد، نمونه موجود را برمی گرداند.
-
سازنده خصوصی: سازنده طوری طراحی شده است که اگر مستقیماً پس از ایجاد نمونه فراخوانی شود، خطا ایجاد می کند. این تضمین می کند که نمونه Singleton فقط از طریق متد getInstance ایجاد می شود.
-
متغیرنمونه: ویژگی استاتیک Singleton.instance برای ذخیره نمونه singleton استفاده می شود. این متغیر فقط در متد getInstance بررسی و اصلاح می شود.
-
استفاده: هنگامی که Singleton.getInstance() فراخوانی می شود، یا یک نمونه جدید ایجاد می کند یا نمونه موجود را برمی گرداند. تلاش برای نمونه سازی مستقیم کلاس با استفاده از ()Singleton جدید یک خطا ایجاد می کند و الگوی Singleton را اعمال می کند.
انتقاد، یا اشکالات الگوی تک تن چیست؟
1. دولت جهانی. آنها به طور کلی به عنوان یک نمونه جهانی استفاده می شوند، چرا اینقدر بد است؟ زیرا شما وابستگی های برنامه خود را به جای افشای آنها از طریق رابط ها در کد خود پنهان می کنید. این سیستم را کمتر شفاف می کند.
2. آنها اصل مسئولیت واحد را نقض می کنند: به دلیل این واقعیت که آنها خلقت و چرخه زندگی خود را کنترل می کنند.
3. می تواند منجر به اتصال محکم تر شود. Singleton ها وابستگی ها را در خود کلاس پنهان می کنند و سیستم را کمتر شفاف می کنند. این می تواند منجر به اتصال محکم تر بین کلاس ها و کاهش مدولاریته شود. آنها ذاتاً باعث می شوند که کدها به طور محکم همراه شوند. این امر جعل کردن آنها را در بسیاری از موارد دشوار می کند.
4. تست سخت. Singleton ها می توانند تست واحد را دشوارتر کنند. از آنجایی که آنها نمونه سازی خود را کنترل می کنند، جایگزین کردن آنها با اشیاء ساختگی یا تنظیم مجدد وضعیت آنها در بین آزمون ها می تواند دشوار باشد که منجر به وابستگی بین آزمون می شود.
5. در برنامه های چند رشته ایاگر به درستی اجرا نشوند، تکتونها میتوانند باعث مشکلات همزمانی شوند، زیرا ممکن است چندین رشته به طور همزمان به نمونه تکتنه دسترسی پیدا کرده و آن را تغییر دهند.
6. انعطاف ناپذیری: هنگامی که یک سینگلتون پیاده سازی می شود، تغییر رفتار آن یا جایگزینی آن با یک پیاده سازی متفاوت می تواند دشوار باشد. این انعطاف ناپذیری می تواند مانع توسعه و سازگاری آینده شود.
نتیجه:
در حالی که الگوی Singleton می تواند در سناریوهای خاصی که یک نمونه واحد واقعاً ضروری است مفید باشد، باید با احتیاط از آن استفاده کرد. جایگزین هایی مانند تزریق وابستگی اغلب می توانند طرح های انعطاف پذیرتر و قابل آزمایش تری را ارائه دهند. وقتی الگوی Singleton را در نظر می گیرید، جوانب مثبت و منفی را به دقت بسنجید تا مشخص کنید که آیا این الگو برای استفاده خاص شما مناسب است یا خیر.
و در اینجا یک الگوی رفتاری است که تکامل من را در حین جمع آوری این مقاله کاملاً توضیح می دهد:D
پیوندها