कोटलिन में डिज़ाइन पैटर्न: उदाहरण और अभ्यास

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

कोटलिन में डिज़ाइन पैटर्न का परिचय



डिज़ाइन पैटर्न (design patterns) सामान्य विकास समस्याओं के सिद्ध समाधान हैं। कोटलिन भाषा में, कई क्लासिक पैटर्न अंतर्निहित क्षमताओं के कारण अधिक संक्षिप्त और सुरक्षित रूप से लागू किए जाते हैं: null-सुरक्षा, एक्सटेंशन फ़ंक्शन, कोरूटीन और एक शक्तिशाली टाइप सिस्टम।



इस लेख में, हम पैटर्न के तीन समूहों का विश्लेषण करेंगे: क्रिएशनल, स्ट्रक्चरल और बिहेवियरल - कोटलिन में वास्तविक उदाहरणों के साथ। आप सीखेंगे कि लचीली और रखरखाव योग्य आर्किटेक्चर बनाने के लिए दैनिक विकास में उनका उपयोग कैसे करें।



क्रिएशनल पैटर्न (Creational)



1. Singleton (एकल)

कोटलिन में, एकल को object कीवर्ड से लागू किया जाता है। यह बिना किसी अतिरिक्त कोड के एक थ्रेड-सेफ लेज़ी सिंगलटन है।



object DatabaseConnection {    private val url = "jdbc:postgresql://localhost:5432/mydb"    private val user = "admin"    private val password = "secret"

fun connect(): String { return "Connected to $url as $user" }}

fun main() { println(DatabaseConnection.connect()) // जाँच करें कि यह एक ही ऑब्जेक्ट है val ref1 = DatabaseConnection val ref2 = DatabaseConnection println(ref1 === ref2) // true}


लाभ: synchronized या volatile लिखने की आवश्यकता नहीं है - कोटलिन एक ही इंस्टेंस की गारंटी देता है।



2. Factory Method (फ़ैक्टरी विधि)

यह ऑब्जेक्ट निर्माण को उपवर्गों को सौंपने की अनुमति देता है। कोटलिन में sealed class और companion object का उपयोग करना सुविधाजनक है।



sealed class Notification {    data class Email(val to: String, val subject: String) : Notification()    data class SMS(val phone: String, val message: String) : Notification()    data class Push(val deviceId: String, val title: String) : Notification()

companion object Factory { fun createEmail(to: String, subject: String): Notification = Email(to, subject) fun createSMS(phone: String, message: String): Notification = SMS(phone, message) fun createPush(deviceId: String, title: String): Notification = Push(deviceId, title) }}

fun send(notification: Notification) { when (notification) { is Notification.Email -> println("Email to ${notification.to}") is Notification.SMS -> println("SMS to ${notification.phone}") is Notification.Push -> println("Push to ${notification.deviceId}") }}

fun main() { val email = Notification.createEmail("user@example.com", "Hello") send(email)}


3. Builder (बिल्डर)

कोटलिन में, बिल्डर को नामित तर्कों और डिफ़ॉल्ट मानों से बदला जा सकता है। लेकिन सत्यापन के साथ जटिल ऑब्जेक्ट के लिए, क्लासिक बिल्डर प्रासंगिक बना हुआ है।



class Pizza private constructor(    val size: String,    val cheese: Boolean,    val pepperoni: Boolean,    val mushrooms: Boolean) {    class Builder {        private var size: String = "Medium"        private var cheese: Boolean = false        private var pepperoni: Boolean = false        private var mushrooms: Boolean = false

fun size(size: String) = apply { this.size = size } fun cheese() = apply { this.cheese = true } fun pepperoni() = apply { this.pepperoni = true } fun mushrooms() = apply { this.mushrooms = true }

fun build(): Pizza { require(size in listOf("Small", "Medium", "Large")) { "Invalid size" } return Pizza(size, cheese, pepperoni, mushrooms) } }}

fun main() { val pizza = Pizza.Builder() .size("Large") .cheese() .pepperoni() .build() println("Pizza: ${pizza.size}, cheese=${pizza.cheese}, pepperoni=${pizza.pepperoni}")}


स्ट्रक्चरल पैटर्न (Structural)



4. Adapter (अडैप्टर)

अडैप्टर उन ऑब्जेक्ट को अनुमति देता है जिनमें असंगत इंटरफ़ेस होते हैं, वे एक साथ काम कर सकें।

ब्लॉग

पुस्तक अनुशंसाएँ