TypeScript में डिज़ाइन पैटर्न: सिद्धांत से व्यवहार तक
डिज़ाइन पैटर्न (Design Patterns) सॉफ़्टवेयर विकास में सामान्य समस्याओं के सिद्ध समाधान हैं। TypeScript के संदर्भ में, इसकी शक्तिशाली टाइप प्रणाली और OOP समर्थन के साथ, "गैंग ऑफ़ फोर" (GoF) पुस्तक के कई क्लासिक पैटर्न एक नया, अधिक सुरुचिपूर्ण रूप लेते हैं। इस लेख में, हम TypeScript में वास्तविक उदाहरणों के साथ तीन प्रमुख पैटर्न पर चर्चा करेंगे जो आपको अधिक स्वच्छ, स्केलेबल और रखरखाव योग्य कोड लिखने में मदद करेंगे।
1. क्रिएशनल पैटर्न: Singleton (सिंगलटन)
उद्देश्य: यह सुनिश्चित करता है कि एक क्लास का केवल एक इंस्टेंस हो, और उस तक वैश्विक पहुँच प्रदान करता है।
TypeScript में, स्टैटिक प्रॉपर्टीज़ और प्राइवेट कंस्ट्रक्टर के कारण Singleton का कार्यान्वयन विशेष रूप से सुविधाजनक है। यह पैटर्न डेटाबेस कनेक्शन, लॉगर या कैशे प्रबंधन के लिए आदर्श है।
class DatabaseConnection { private static instance: DatabaseConnection; private connectionString: string;
private constructor(connectionString: string) { this.connectionString = connectionString; console.log(`कनेक्शन बनाया गया: ${connectionString}`); }
public static getInstance(connectionString?: string): DatabaseConnection { if (!DatabaseConnection.instance) { if (!connectionString) { throw new Error("पहली बार इनिशियलाइज़ेशन के लिए connection string आवश्यक है"); } DatabaseConnection.instance = new DatabaseConnection(connectionString); } return DatabaseConnection.instance; }
public query(sql: string): void { console.log(`क्वेरी निष्पादित कर रहा है: ${sql} पर ${this.connectionString}`); }}
// उपयोगconst db1 = DatabaseConnection.getInstance("postgres://localhost:5432/mydb");const db2 = DatabaseConnection.getInstance();
console.log(db1 === db2); // true — एक ही ऑब्जेक्टdb1.query("SELECT * FROM users");महत्वपूर्ण: TypeScript में अधिक लचीले कार्यान्वयन के लिए आप readonly और जेनेरिक का उपयोग कर सकते हैं। हालाँकि, याद रखें कि Singleton परीक्षण को जटिल बना सकता है — विकल्प के रूप में डिपेंडेंसी इंजेक्शन (DI) पर विचार करें।
2. स्ट्रक्चरल पैटर्न: Decorator (डेकोरेटर)
उद्देश्य: किसी ऑब्जेक्ट की संरचना को बदले बिना उसमें नई जिम्मेदारियाँ गतिशील रूप से जोड़ता है। TypeScript में, डेकोरेटर भाषा की एक प्रथम श्रेणी की क्षमता है (ES5 में प्रायोगिक, लेकिन Angular और NestJS में सक्रिय रूप से उपयोग किया जाता है)।
मेथड कॉल को लॉग करने के लिए डेकोरेटर का उदाहरण देखें:
// लक्ष्य इंटरफ़ेसinterface ILogger { log(message: string): void;}
// बेस क्लासclass SimpleLogger implements ILogger { public log(message: string): void { console.log(`[LOG]: ${message}`); }}
// डेकोरेटर (रैपर क्लास)class TimestampDecorator implements ILogger { private logger: ILogger;
constructor(logger: ILogger) { this.logger = logger; }
public log(message: string): void { const timestamp = new Date().toISOString(); this.logger.log(`[${timestamp}] ${message}`); }}
// फ़ॉर्मेटिंग के लिए डेकोरेटरclass UpperCaseDecorator implements ILogger { private logger: ILogger;
constructor(logger: ILogger) { this.logger = logger; }
public log(message: string): void { this.logger.log(message.toUpperCase()); }}
// उपयोगlet logger: ILogger = new SimpleLogger();logger.log("नमस्ते दुनिया"); // [LOG]: नमस्ते दुनिया
logger = new TimestampDecorator(logger);logger = new UpperCaseDecorator(logger);logger.log("डेकोरेटर काम कर रहे हैं"); // [LOG]: [2025-01-15T10:30:00.000Z] डेकोरेटर काम कर रहे हैंसुझाव: TypeScript में क्लास और प्रॉपर्टी डेकोरेटर भी उपलब्ध हैं (@decorator सिंटैक्स)