آموزش الگوهای طراحی: تسلط بر الگوی طراحی Singleton

آموزش الگوهای طراحی: تسلط بر الگوی طراحی Singleton
الگوی Singleton یکی از ساده ترین و رایج ترین الگوهای طراحی در توسعه نرم افزار است. با وجود سادگی، الگوی Singleton در صورت استفاده مناسب می تواند فوق العاده قدرتمند باشد.
در این مقاله، الگوی Singleton را بررسی خواهیم کرد، مشکلاتی که حل می کند را درک می کنیم و پیاده سازی آن را با استفاده از TypeScript بررسی می کنیم.
فهرست مطالب
-
تعریف الگوی Singleton
-
سناریو: درک مسئله
-
پروژه های واقعی که از الگوی Singleton استفاده می کنند
1. تعریف الگوی تک
الگوی Singleton تضمین می کند که یک کلاس فقط می تواند یک نمونه داشته باشد و یک نقطه ورود جهانی به آن نمونه ارائه می دهد. با متمرکز کردن ایجاد شی، به مدیریت موثر منابع مشترک کمک می کند و رفتار منسجم را در سراسر سیستم اعمال می کند.
ویژگی های کلیدی الگوی سینگلتون
-
نمونه واحد: اطمینان حاصل می کند که فقط یک نمونه از کلاس ایجاد شده است.
-
نقطه دسترسی جهانی: یک راه واحد برای دسترسی به یک نمونه واحد در سراسر برنامه ارائه می دهد.
-
Lazy Initialization: نمونه فقط در صورت نیاز ایجاد می شود و استفاده از منابع را بهینه می کند.
-
ایمنی نخ (در صورت وجود): در محیطهای چند رشتهای، تضمین میکند که نمونه singleton به طور ایمن در سراسر رشتهها به اشتراک گذاشته میشود.
2. سناریو: درک مسئله
تصور کنید که در حال ساختن یک سیستم ورود به سیستم برای یک برنامه پیچیده هستید. گزارشها باید در یک فایل یا کنسول نوشته شوند، و اطمینان از اینکه فقط یک نمونه لاگر این گزارشها را مدیریت میکند، بسیار مهم است تا از تداخل یا افزونگی جلوگیری شود. بدون Singleton، چندین نمونه لاگر میتواند منجر به گزارشهای پراکنده، رفتار ناسازگار و اتلاف منابع شود.
با پیادهسازی الگوی Singleton، تضمین میکنید که تمام بخشهای برنامه شما از یک نمونه لاگر مشترک استفاده میکنند و از ثبات و کنترل متمرکز اطمینان حاصل میکنید.
پیاده سازی در TypeScript
class Logger {
private static instance: Logger;
private logs: string[] = [];
private constructor() {}
public static getInstance(): Logger {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return Logger.instance;
}
public log(message: string): void {
this.logs.push(message);
console.log(`Logged: ${message}`);
}
public showLogs(): void {
console.log(this.logs);
}
}
// Client code
const logger1 = Logger.getInstance();
logger1.log("First log entry");
const logger2 = Logger.getInstance();
logger2.log("Second log entry");
console.log("Are both instances the same?", logger1 === logger2); // true
logger1.showLogs();
توضیح:
-
سازنده خصوصی: از ایجاد مستقیم اشیا با استفاده از کلمه کلیدی جدید جلوگیری می کند.
-
نمونه ایستا: نمونه واحد کلاس را ذخیره می کند.
-
Lazy Initialization: نمونه فقط زمانی ایجاد می شود که getInstance برای اولین بار فراخوانی شود.
3. پروژه های واقعی که از الگوی Singleton استفاده می کنند
-
مدیریت پیکربندی: برنامه ها اغلب از یک Singleton برای مدیریت تنظیمات پیکربندی جهانی استفاده می کنند.
-
سیستم های ورود به سیستم: Logger ها یک مورد استفاده کلاسیک برای Singleton ها هستند که مکانیزم متمرکزی را برای نوشتن گزارش ها ارائه می دهند.
-
اتصالات پایگاه داده: Singleton ها اتصالات پایگاه داده را مدیریت می کنند تا از ایجاد چندین اتصال سربار جلوگیری کنند.
-
مدیریت کش: سیستمهای ذخیرهسازی از Singletons استفاده میکنند تا از یک منبع منفرد حقیقت برای دادههایی که اغلب به آنها دسترسی دارند اطمینان حاصل کنند.
نتیجه گیری
الگوی Singleton یک الگوی طراحی ساده و در عین حال قدرتمند است که روشی کنترل شده برای مدیریت منابع مشترک و اعمال رفتار منسجم ارائه می دهد. در حالی که اجتناب از استفاده بی رویه از آن بسیار مهم است، الگوی Singleton می تواند ابزار ارزشمندی در سناریوهایی مانند مدیریت پیکربندی، ورود به سیستم و ذخیره سازی باشد.
در مقاله بعدی ما الگوهای طراحی را یاد بگیرید سری، ما آن را بررسی خواهیم کرد الگوهای طراحی سازه با بیان با الگوی آداپتور با ما همراه باشید!