Kotlin Academy · पाठ

companion object के साथ Factory Methods

companion object और invoke operator का उपयोग करके factory patterns लागू करें।

पाठ 4, कुल 4 में से13 चरण

companion object के साथ Factory Methods, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

फ़ैक्टरी मेथड पैटर्न

फ़ैक्टरी मेथड सार्थक नामों और तर्क के साथ ऑब्जेक्ट बनाते हैं तथा कंस्ट्रक्टर की जटिलता छिपाते हैं। Kotlin का सहचर ऑब्जेक्ट इनके लिए आदर्श स्थान है।

निजी कंस्ट्रक्टर + फ़ैक्टरी

कंस्ट्रक्टर को निजी बनाएँ और सहचर ऑब्जेक्ट के माध्यम से फ़ैक्टरी मेथड उपलब्ध कराएँ।
class Token private constructor(val value: String) {
    companion object {
        fun generate() = Token(java.util.UUID.randomUUID().toString())
        fun fromString(s: String) = Token(s.trim())
    }
}
val t = Token.generate()

नामित फ़ैक्टरी मेथड

वर्णनात्मक नाम उद्देश्य को स्पष्ट करते हैं — कंस्ट्रक्टर ओवरलोड की तरह अस्पष्ट नहीं होते।
class Duration private constructor(val ms: Long) {
    companion object {
        fun ofMillis(ms: Long) = Duration(ms)
        fun ofSeconds(s: Long) = Duration(s * 1000)
        fun ofMinutes(m: Long) = Duration(m * 60_000)
    }
}
val d = Duration.ofMinutes(5)

फ़ैक्टरी से null लौटाना

अमान्य इनपुट के लिए फ़ैक्टरी अपवाद फेंकने के बजाय null लौटा सकती हैं।
class Percentage private constructor(val value: Int) {
    companion object {
        fun of(value: Int): Percentage? {
            return if (value in 0..100) Percentage(value) else null
        }
    }
}
val p = Percentage.of(75) ?: error("Invalid")

कैश किए गए इंस्टेंस

फ़ैक्टरी इंस्टेंस को कैश करके उनका पुनः उपयोग कर सकती हैं।
class Direction private constructor(val name: String) {
    companion object {
        private val cache = mutableMapOf<String, Direction>()
        fun of(name: String) = cache.getOrPut(name.uppercase()) {
            Direction(name.uppercase())
        }
    }
}

कंस्ट्रक्टर-जैसी फ़ैक्टरी के रूप में invoke ऑपरेटर

क्लास को फ़ंक्शन की तरह कॉल करने के लिए invoke() परिभाषित करें।
class Email private constructor(val address: String) {
    companion object {
        operator fun invoke(raw: String): Email {
            require("@" in raw) { "Invalid email" }
            return Email(raw.lowercase())
        }
    }
}
val e = Email("Test@Example.com")  // looks like a constructor

सीलबंद क्लासों के साथ एब्स्ट्रैक्ट फ़ैक्टरी

टाइप-सुरक्षित निर्माण के लिए फ़ैक्टरी मेथड को सीलबंद क्लास पदानुक्रम के साथ संयोजित करें।
sealed class Shape {
    data class Circle(val r: Double) : Shape()
    data class Rect(val w: Double, val h: Double) : Shape()
    companion object {
        fun circle(r: Double) = Circle(r)
        fun rect(w: Double, h: Double) = Rect(w, h)
    }
}

निर्भरता-सचेत फ़ैक्टरी

फ़ैक्टरी निर्भरताएँ स्वीकार कर सकती हैं और उन्हें आपस में जोड़ सकती हैं।
class Repository(private val db: Database) {
    companion object {
        fun create(db: Database = Database.instance) = Repository(db)
    }
    fun findAll() = db.query("SELECT * FROM items")
}

परीक्षणों में फ़ैक्टरी

फ़ैक्टरी मेथड परीक्षण ऑब्जेक्ट का निर्माण साफ़ और स्पष्ट बनाते हैं।
class Order private constructor(
    val id: Long, val items: List<String>, val paid: Boolean
) {
    companion object {
        fun unpaid(id: Long, items: List<String>) = Order(id, items, false)
        fun paid(id: Long, items: List<String>) = Order(id, items, true)
    }
}

JSON/Config से

फ़ैक्टरी पार्सिंग के लिए स्वाभाविक प्रवेश-बिंदु होती हैं।
class AppConfig private constructor(
    val baseUrl: String, val timeout: Int
) {
    companion object {
        fun fromEnv() = AppConfig(
            baseUrl = System.getenv("BASE_URL") ?: "http://localhost",
            timeout = System.getenv("TIMEOUT")?.toInt() ?: 30
        )
    }
}

निजी कंस्ट्रक्टर का उपयोग कब न करें

केवल शैली के लिए कंस्ट्रक्टर को निजी न बनाएँ। इसका उपयोग तब करें जब मान्यकरण आवश्यक हो, कैशिंग की ज़रूरत हो या निर्माण के कई तरीकों के अलग-अलग अर्थ हों।

त्वरित जाँच

कौन-सा ऑपरेटर फ़ंक्शन सहचर ऑब्जेक्ट को कंस्ट्रक्टर की तरह कॉल करने देता है: Email("a@b.com")?

पुनरावलोकन

सहचर ऑब्जेक्ट में फ़ैक्टरी मेथड: निजी कंस्ट्रक्टर और नामित फ़ैक्टरी, वैकल्पिक null रिटर्न, कैशिंग तथा कंस्ट्रक्टर-जैसे सिंटैक्स के लिए invoke()। फ़ैक्टरी ऑब्जेक्ट निर्माण को सुरक्षित, अभिव्यंजक और परीक्षण योग्य बनाती हैं!
शुरुआत निःशुल्क

एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “companion object के साथ Factory Methods” पाठ निःशुल्क है?

हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “companion object के साथ Factory Methods” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“companion object के साथ Factory Methods” में मैं क्या सीखूँगा?

companion object और invoke operator का उपयोग करके factory patterns लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“companion object के साथ Factory Methods” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. object Declaration: Kotlin Singletons
  2. companion object: Kotlin में Static-जैसे Members
  3. Anonymous Objects और Object Expressions
  4. companion object के साथ Factory Methods
← Kotlin Academy पर वापस जाएँ