लेख

डिज़ाइन पैटर्न क्या हैं: उनका उपयोग क्यों करें, वर्गीकरण, पक्ष और विपक्ष

सॉफ़्टवेयर इंजीनियरिंग में, डिज़ाइन पैटर्न उन समस्याओं का इष्टतम समाधान हैं जो आमतौर पर सॉफ़्टवेयर डिज़ाइन में होती हैं।

वे पूर्व परियोजनाओं की तरह हैंdefiकई, आज़माए और परखे हुए उपकरण जिन्हें आप अपने कोड में आवर्ती डिज़ाइन समस्या को हल करने के लिए अनुकूलित कर सकते हैं।

अनुमानित पढ़ने का समय: 6 मिनट

डिज़ाइन पैटर्न क्या है

डिज़ाइन पैटर्न कोई कोड नहीं है जिसे हम कॉपी करके अपने प्रोग्राम में डाल सकते हैं, जैसा कि हम मानक फ़ंक्शंस या लाइब्रेरीज़ के साथ कर सकते हैं। डिज़ाइन पैटर्न एक सामान्य अवधारणा है जो किसी विशेष समस्या को हल करने में सक्षम है। मूल रूप से एक मॉडल जिसके विवरण का हम अनुसरण कर सकते हैं और एक समाधान लागू कर सकते हैं जो हमारे कार्यक्रम की वास्तविकता के अनुकूल हो।

मॉडल अक्सर एल्गोरिदम के साथ भ्रमित होते हैं, क्योंकि दोनों अवधारणाएं कुछ ज्ञात समस्याओं के विशिष्ट समाधान का वर्णन करती हैं। जबकि एक एल्गोरिदम defiयदि हमेशा कार्यों का एक स्पष्ट सेट होता है जो एक निश्चित लक्ष्य प्राप्त कर सकता है, तो एक मॉडल किसी समाधान का उच्च स्तरीय विवरण होता है। दो अलग-अलग प्रोग्रामों पर लागू एक ही मॉडल का कोड भिन्न हो सकता है।

एक सादृश्य बनाना चाहते हुए, हम एक खाना पकाने की विधि के बारे में सोच सकते हैं: लक्ष्य प्राप्त करने के लिए दोनों के पास स्पष्ट कदम हैं। हालाँकि, एक मॉडल एक प्रोजेक्ट की तरह होता है, जिसका परिणाम और उसकी विशेषताएँ आप देख सकते हैं, लेकिन कार्यान्वयन का सटीक क्रम हम पर निर्भर करता है जो कोड लिखते हैं।

डिज़ाइन पैटर्न किससे बना होता है?

अधिकांश पैटर्न को बहुत औपचारिक रूप से वर्णित किया गया है ताकि लोग उन्हें कई संदर्भों में पुन: पेश कर सकें। आइए नीचे उन तत्वों को देखें जो किसी मॉडल के विवरण में मौजूद हैं:

  • इरादा मॉडल में समस्या और समाधान दोनों का संक्षेप में वर्णन किया गया है।
  • प्रेरणा समस्या और समाधान को आगे समझाता है जिसे मॉडल संभव बनाता है।
  • संरचना कक्षाओं का मॉडल के प्रत्येक भाग को दर्शाता है और वे कैसे संबंधित हैं।
  • कोड उदाहरण सबसे लोकप्रिय प्रोग्रामिंग भाषाओं में से एक में मॉडल के पीछे के विचार को समझना आसान हो जाता है।

उनका उपयोग क्यों करें?

एक प्रोग्रामर डिज़ाइन पैटर्न के अस्तित्व को जाने बिना सॉफ्टवेयर विकसित कर सकता है। बहुत से लोग ऐसा करते हैं और इसी कारण से वे बिना जाने-समझे कुछ योजनाएं लागू कर देते हैं। लेकिन फिर हमें उन्हें सीखने में समय क्यों बर्बाद करना चाहिए?

  • डिज़ाइन पैटर्न की एक किट है आजमाए और परखे हुए समाधान सॉफ़्टवेयर डिज़ाइन में सामान्य समस्याओं के लिए। भले ही आपको कभी भी इन समस्याओं का सामना न करना पड़े, पैटर्न जानना अभी भी उपयोगी है क्योंकि यह आपको ऑब्जेक्ट-ओरिएंटेड डिज़ाइन सिद्धांतों का उपयोग करके सभी प्रकार की समस्याओं को हल करना सिखाता है।
  • डिजाइन मॉडल defiवे एक सामान्य भाषा बनाते हैं जिसका उपयोग आप और आपकी टीम अधिक प्रभावी ढंग से संवाद करने के लिए कर सकते हैं। आप कह सकते हैं, "ओह, ऐसा करने के लिए बस सिंगलटन का उपयोग करें" और हर कोई आपके सुझाव के पीछे के विचार को समझ जाएगा। यदि आप पैटर्न और उसका नाम जानते हैं तो यह समझाने की कोई आवश्यकता नहीं है कि सिंगलटन क्या है।

डिज़ाइन पैटर्न का वर्गीकरण

डिज़ाइन पैटर्न पूरे डिज़ाइन सिस्टम में जटिलता, विवरण के स्तर और प्रयोज्यता के पैमाने में भिन्न होते हैं।

सादृश्य से, हम कुछ ट्रैफिक लाइटें स्थापित करके या पैदल चलने वालों के लिए भूमिगत मार्ग के साथ एक संपूर्ण बहुस्तरीय इंटरचेंज का निर्माण करके एक चौराहे को सुरक्षित बना सकते हैं।

सबसे बुनियादी, निम्न-स्तरीय मॉडल को अक्सर कहा जाता है मुहावरों . वे आमतौर पर केवल एक ही प्रोग्रामिंग भाषा पर लागू होते हैं।

सबसे सार्वभौमिक और उच्च स्तरीय मॉडल हैं वास्तुशिल्प मॉडल . डेवलपर्स इन पैटर्न को वस्तुतः किसी भी भाषा में लागू कर सकते हैं। अन्य पैटर्न के विपरीत, उनका उपयोग संपूर्ण एप्लिकेशन के आर्किटेक्चर को डिज़ाइन करने के लिए किया जा सकता है।

इसके अलावा, सभी मॉडलों को उनके अनुसार वर्गीकृत किया जा सकता है कोशिश की या उद्देश्य. तीन मुख्य वर्ग हैं:

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।
  • सृजनात्मक मॉडल वे ऑब्जेक्ट निर्माण तंत्र प्रदान करते हैं जो लचीलापन बढ़ाते हैं और मौजूदा कोड का पुन: उपयोग करते हैं।
  • संरचनात्मक मॉडल वे बताते हैं कि इन संरचनाओं को लचीला और कुशल रखते हुए, वस्तुओं और कक्षाओं को बड़ी संरचनाओं में कैसे इकट्ठा किया जाए।
  • व्यवहार मॉडल वे वस्तुओं के बीच प्रभावी संचार और जिम्मेदारियों के असाइनमेंट से निपटते हैं।

लारवेल में डिज़ाइन पैटर्न का उदाहरण: मुखौटा

मुखौटा एक संरचनात्मक डिज़ाइन पैटर्न है जो लाइब्रेरी, फ्रेमवर्क, या कक्षाओं के किसी अन्य जटिल सेट को एक सरलीकृत इंटरफ़ेस प्रदान करता है।

समस्या

आइए मान लें कि हमें एक परिष्कृत पुस्तकालय या ढांचे से संबंधित वस्तुओं के एक बड़े समूह के आधार पर सॉफ्टवेयर को काम करने की आवश्यकता है। आम तौर पर, हमें इन सभी ऑब्जेक्ट्स को प्रारंभ करने, निर्भरताओं का ट्रैक रखने, सही क्रम में विधियों को निष्पादित करने आदि की आवश्यकता होगी।

परिणामस्वरूप, कक्षाओं का व्यावसायिक तर्क तृतीय-पक्ष कक्षाओं के कार्यान्वयन विवरण के साथ मजबूती से जुड़ जाएगा, जिससे उन्हें समझना और प्रबंधित करना मुश्किल हो जाएगा।

soluzione

एक facade एक वर्ग है जो एक जटिल उपप्रणाली को एक सरल इंटरफ़ेस प्रदान करता है जिसमें कई गतिशील भाग होते हैं। ए facade सबसिस्टम के साथ सीधे काम करने की तुलना में सीमित कार्यक्षमता प्रदान कर सकता है। हालाँकि, इसमें केवल वे सुविधाएँ शामिल हैं जिनकी ग्राहक वास्तव में परवाह करते हैं।

एक लो facade यह तब उपयोगी होता है जब हमें ऐप को एक परिष्कृत लाइब्रेरी के साथ एकीकृत करने की आवश्यकता होती है जिसमें दर्जनों सुविधाएं होती हैं, लेकिन हमें इसकी कार्यक्षमता का केवल एक छोटा सा हिस्सा चाहिए होता है।

उदाहरण के लिए, एक ऐप जो बिल्लियों के साथ छोटे मज़ेदार वीडियो सोशल मीडिया पर अपलोड करता है, संभावित रूप से एक पेशेवर वीडियो रूपांतरण लाइब्रेरी का उपयोग कर सकता है। हालाँकि, हमें वास्तव में एकल विधि वाली एक कक्षा की आवश्यकता है encode(filename, format). ऐसी कक्षा बनाने और उसे वीडियो रूपांतरण लाइब्रेरी से जोड़ने के बाद, हमारे पास हमारी पहली कक्षा होगी facade.

उदाहरण के लिए, किसी कॉल सेंटर का टेलीफोन ऑपरेटर एक जैसा होता है facade. वास्तव में, जब हम टेलीफोन ऑर्डर देने के लिए किसी स्टोर की टेलीफोन सेवा पर कॉल करते हैं, तो एक ऑपरेटर हमारा होता है facade स्टोर की सभी सेवाओं और विभागों के प्रति। ऑपरेटर ऑर्डरिंग सिस्टम, भुगतान गेटवे और विभिन्न डिलीवरी सेवाओं के लिए एक सरल वॉयस इंटरफ़ेस प्रदान करता है।

PHP में वास्तविक उदाहरण

के बारे में सोचो मुखौटा कुछ जटिल उपप्रणालियों के लिए एक सरल एडाप्टर के रूप में। Facade एक ही वर्ग के भीतर जटिलता को अलग करता है और अन्य एप्लिकेशन कोड को सरल इंटरफ़ेस का उपयोग करने की अनुमति देता है।

इस उदाहरण में, Facade क्लाइंट कोड से YouTube API और FFmpeg लाइब्रेरी की जटिलता को छुपाता है। दर्जनों कक्षाओं के साथ काम करने के बजाय, क्लाइंट Facade पर एक सरल विधि का उपयोग करता है।

<?php

namespace RefactoringGuru\Facade\RealWorld;

/**
 * The Facade provides a single method for downloading videos from YouTube. This
 * method hides all the complexity of the PHP network layer, YouTube API and the
 * video conversion library (FFmpeg).
 */
class YouTubeDownloader
{
    protected $youtube;
    protected $ffmpeg;

    /**
     * It is handy when the Facade can manage the lifecycle of the subsystem it
     * uses.
     */
    public function __construct(string $youtubeApiKey)
    {
        $this->youtube = new YouTube($youtubeApiKey);
        $this->ffmpeg = new FFMpeg();
    }

    /**
     * The Facade provides a simple method for downloading video and encoding it
     * to a target format (for the sake of simplicity, the real-world code is
     * commented-out).
     */
    public function downloadVideo(string $url): void
    {
        echo "Fetching video metadata from youtube...\n";
        // $title = $this->youtube->fetchVideo($url)->getTitle();
        echo "Saving video file to a temporary file...\n";
        // $this->youtube->saveAs($url, "video.mpg");

        echo "Processing source video...\n";
        // $video = $this->ffmpeg->open('video.mpg');
        echo "Normalizing and resizing the video to smaller dimensions...\n";
        // $video
        //     ->filters()
        //     ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
        //     ->synchronize();
        echo "Capturing preview image...\n";
        // $video
        //     ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
        //     ->save($title . 'frame.jpg');
        echo "Saving video in target formats...\n";
        // $video
        //     ->save(new FFMpeg\Format\Video\X264(), $title . '.mp4')
        //     ->save(new FFMpeg\Format\Video\WMV(), $title . '.wmv')
        //     ->save(new FFMpeg\Format\Video\WebM(), $title . '.webm');
        echo "Done!\n";
    }
}

/**
 * The YouTube API subsystem.
 */
class YouTube
{
    public function fetchVideo(): string { /* ... */ }

    public function saveAs(string $path): void { /* ... */ }

    // ...more methods and classes...
}

/**
 * The FFmpeg subsystem (a complex video/audio conversion library).
 */
class FFMpeg
{
    public static function create(): FFMpeg { /* ... */ }

    public function open(string $video): void { /* ... */ }

    // ...more methods and classes... RU: ...дополнительные методы и классы...
}

class FFMpegVideo
{
    public function filters(): self { /* ... */ }

    public function resize(): self { /* ... */ }

    public function synchronize(): self { /* ... */ }

    public function frame(): self { /* ... */ }

    public function save(string $path): self { /* ... */ }

    // ...more methods and classes... RU: ...дополнительные методы и классы...
}


/**
 * The client code does not depend on any subsystem's classes. Any changes
 * inside the subsystem's code won't affect the client code. You will only need
 * to update the Facade.
 */
function clientCode(YouTubeDownloader $facade)
{
    // ...

    $facade->downloadVideo("https://www.youtube.com/watch?v=QH2-TGUlwu4");

    // ...
}

$facade = new YouTubeDownloader("APIKEY-XXXXXXXXX");
clientCode($facade);

Ercole Palmeri

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

हाल के लेख

Veeam रैनसमवेयर के लिए सुरक्षा से लेकर प्रतिक्रिया और पुनर्प्राप्ति तक सबसे व्यापक समर्थन प्रदान करता है

वीईएम द्वारा कोववेयर साइबर जबरन वसूली घटना प्रतिक्रिया सेवाएं प्रदान करना जारी रखेगा। कोववेयर फोरेंसिक और उपचारात्मक क्षमताएं प्रदान करेगा...

अप्रैल 23 2024

हरित और डिजिटल क्रांति: कैसे पूर्वानुमानित रखरखाव तेल और गैस उद्योग को बदल रहा है

संयंत्र प्रबंधन के लिए एक अभिनव और सक्रिय दृष्टिकोण के साथ, पूर्वानुमानित रखरखाव तेल और गैस क्षेत्र में क्रांति ला रहा है।…

अप्रैल 22 2024

यूके के एंटीट्रस्ट रेगुलेटर ने जेनएआई पर बिगटेक को लेकर चिंता जताई है

यूके सीएमए ने कृत्रिम बुद्धिमत्ता बाजार में बिग टेक के व्यवहार के बारे में चेतावनी जारी की है। वहाँ…

अप्रैल 18 2024

कासा ग्रीन: इटली में स्थायी भविष्य के लिए ऊर्जा क्रांति

इमारतों की ऊर्जा दक्षता बढ़ाने के लिए यूरोपीय संघ द्वारा तैयार की गई "केस ग्रीन" डिक्री ने अपनी विधायी प्रक्रिया पूरी कर ली है...

अप्रैल 18 2024

अपनी भाषा में इनोवेशन पढ़ें

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

Seguici