प्रौद्योगिकी साझेदारी

डिजाइन पैटर्न उपयोग परिदृश्य कार्यान्वयन उदाहरणानि तथा लाभाः हानिश्च (संरचनात्मकप्रतिमान - प्रॉक्सी पैटर्न, रूपप्रतिमान)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

संरचनात्मक प्रतिमानम्

प्रॉक्सी पैटर्न

Proxy Pattern इति संरचनात्मकं डिजाइन-प्रतिरूपं यत् प्रॉक्सी-वस्तुं परिचययित्वा अन्यस्य वस्तुनः प्रवेशं नियन्त्रयति । इदं प्रॉक्सी-वस्तुं प्रॉक्सी-वस्तुं अतिरिक्तं कार्यक्षमतां प्रदातुं शक्नोति, यथा अभिगम-नियन्त्रणं, आलस्य-प्रारम्भः, लॉगिंग्, अथवा संजाल-प्रवेशः ।

प्रयोज्य दृश्य

  1. दूरस्थः कारकः

    • विभिन्नेषु पतास्थानेषु वस्तुनः स्थानीयप्रतिपादनं प्रदाति ।
  2. आभासी कारक

    • आवश्यकतानुसारं महत् वस्तूनि रचयन्तु।
  3. रक्षणकारक

    • मूलवस्तुं प्रति प्रवेशं नियन्त्रयन्तु।
  4. स्मार्ट मार्गदर्शन

    • वस्तुं अभिगत्य केचन अतिरिक्तक्रियाः कुर्वन्तु, यथा गणनाक्रियाः अथवा सन्दर्भपरिचयः ।

कार्यान्वयनम् उदाहरणम् (जावा) २.

निम्नलिखितम् प्रॉक्सी-प्रतिमानस्य सरलं कार्यान्वयन-उदाहरणम् अस्ति, यत् प्रॉक्सी-वस्तुद्वारा वास्तविक-वस्तु-प्रवेशं कथं नियन्त्रयितुं शक्यते इति दर्शयति ।

1. विषयान्तरफलकं परिभाषयन्तु
public interface Subject {
    void request();
}
  • 1
  • 2
  • 3
  • दृष्टान्तरूपेण दर्शयतुSubject अन्तरफलकं परिभाषयति कrequest विधिः, एषः एव विधिः यत् वास्तविकस्य वस्तुनः प्रॉक्सीवस्तुनः च कार्यान्वयनस्य आवश्यकता वर्तते ।
2. वास्तविकविषयवर्गं परिभाषयन्तु (RealSubject) .
public class RealSubject implements Subject {
    public void request() {
        System.out.println("RealSubject: Handling request.");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • दृष्टान्तरूपेण दर्शयतुRealSubject वर्गः कार्यान्वितःSubject अन्तरफलकम्request विधिः, यत् वर्गं वास्तवतः अनुरोधं सम्पादयति तस्य प्रतिनिधित्वं करोति ।
3. प्रॉक्सी वर्गं (Proxy) परिभाषयन्तु ।
public class Proxy implements Subject {
    private RealSubject realSubject;

    public Proxy(RealSubject realSubject) {
        this.realSubject = realSubject;
    }

    public void request() {
        if (this.checkAccess()) {
            this.realSubject.request();
            this.logAccess();
        }
    }

    private boolean checkAccess() {
        // 检查访问权限
        System.out.println("Proxy: Checking access prior to firing a real request.");
        return true;
    }

    private void logAccess() {
        // 记录请求日志
        System.out.println("Proxy: Logging the time of request.");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • दृष्टान्तरूपेण दर्शयतु
    • Proxy वर्गः कार्यान्वितःSubject अन्तरफलकं धारयति च aRealSubject वस्तु।
    • अस्ति request मेथड् मध्ये प्रॉक्सी क्लास् प्रथमं एक्सेस् अनुमतिः परीक्षते ततः वास्तविकस्य ऑब्जेक्ट् इत्यस्य आह्वानं करोतिrequest विधिः, अन्ते च अनुरोधवृत्तलेखं अभिलेखयन्तु ।
4. ग्राहकसङ्केतः
public class Client {
    public static void main(String[] args) {
        RealSubject realSubject = new RealSubject();
        Proxy proxy = new Proxy(realSubject);
        
        proxy.request();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • दृष्टान्तरूपेण दर्शयतु
    • Client वर्गः निर्मितःRealSubject तथाProxy वस्तु, माध्यमेनProxy वस्तु आह्वानrequest विधिः नियन्त्रयितुंRealSubject अभिगमः।

लाभ

  1. एकान्तवासः

    • प्रॉक्सी मोडः आह्वानकर्तुः वास्तविकवस्तुनः च मध्ये मध्यस्थरूपेण कार्यं कर्तुं शक्नोति, प्रणालीघटकयोः मध्ये युग्मनं न्यूनीकरोति, वस्तुनां मध्ये पृथक्त्वं वर्धयति च
  2. सुरक्षा

    • वास्तविकवस्तूनाम् अभिगमनं प्रॉक्सीद्वारा नियन्त्रयितुं शक्यते, येन सुरक्षापरीक्षाः गहनसत्यापनं च भवति ।
  3. मापनीयता

    • प्रॉक्सी मोड् विशिष्टं वस्तुसङ्केतं परिवर्तनं विना लचीलतया कार्याणि योजयितुं शक्नोति ।
  4. चतुरः

    • केचन अतिरिक्तक्रियाः, यथा विलम्बितप्रारम्भः, अभिगम-वृत्तलेखाः च, सेवावस्तु-अन्तरफलकं परिवर्तनं विना कार्यान्वितुं शक्यन्ते ।

अभावः

  1. कोड जटिलता

    • एजेण्ट्-प्रवर्तनस्य अर्थः अपि प्रणाल्याः जटिलतां वर्धयितुं, सम्भवतः नूतनानां वर्गानां, अन्तरफलकानां च परिचयः, कोड-अवगमनस्य, अनुरक्षणस्य च व्ययस्य वर्धनं च
  2. प्रतिक्रिया समय

    • प्रॉक्सी मोड् इत्यनेन प्रणाली मन्दतरं चालयितुं शक्नोति, विशेषतः यदि प्रॉक्सी-सञ्चालने बहु प्रक्रिया-तर्कः योजितः अस्ति ।
  3. डिजाइन कठिनता

    • प्रॉक्सी-प्रतिमानस्य सम्यक् परिकल्पना, कार्यान्वयनञ्च समग्र-प्रणाली-निर्माणस्य सावधानीपूर्वकं विचारः आवश्यकः यत् प्रणाली-प्रदर्शने कोऽपि नकारात्मकः प्रभावः नास्ति इति सुनिश्चितं भवति

वर्ग आरेख

Client
  |
  v
Subject <---- Proxy <---- RealSubject
  • 1
  • 2
  • 3
  • 4

सारांशं कुरुत

प्रॉक्सी-प्रतिमानं वस्तुषु प्रवेशं नियन्त्रयितुं प्रबन्धनं च कर्तुं कुशलं मार्गं प्रदाति । प्रॉक्सी इत्यस्य उपयोगेन व्यावसायिकवस्तूनाम् उत्तरदायित्वं स्पष्टं कृत्वा विविधानि कार्याणि योजयितुं शक्नुवन्ति । एषः मोड् विशेषतया तेषां परिदृश्यानां कृते उपयुक्तः अस्ति येषु व्यावसायिकवस्तूनाम् अभिगमनियन्त्रणम् अन्येषां पूर्वसंसाधनक्रियाणां च आवश्यकता भवति ।

मुखौटा पैटर्न

Facade Pattern एकः संरचनात्मकः डिजाइन-प्रतिरूपः अस्ति यः उपतन्त्रे अन्तरफलकानां समूहं प्राप्तुं एकीकृतं अन्तरफलकं प्रदातुं जटिल-उपतन्त्राणां उपयोगं सुलभं करोति मुखाकृतिप्रतिमानं उच्चस्तरीयं अन्तरफलकं परिभाषयति यत् अस्य उपतन्त्रस्य उपयोगः सुलभं करोति ।

प्रयोज्य दृश्य

  1. जटिलप्रणालीनां कृते अन्तरफलकानि सरलीकरोतु

    • उपतन्त्रैः सह बाह्यपरस्परक्रियाणां जटिलतां न्यूनीकर्तुं जटिलउपतन्त्राणां कृते सरलं अन्तरफलकं प्रदातव्यम् ।
  2. पदानुक्रमं

    • बहुस्तरीयप्रणालीसंरचने प्रत्येकस्य स्तरस्य प्रवेशद्वारं परिभाषितुं स्तरयोः मध्ये आश्रयाणां सरलीकरणाय च रूपप्रतिमानानाम् उपयोगः कर्तुं शक्यते ।
  3. वियुग्मित प्रणाली

    • रूपप्रतिमानस्य परिचयेन उपतन्त्रस्य ग्राहकस्य च युग्मनं न्यूनीकरोति ।

कार्यान्वयनम् उदाहरणम् (जावा) २.

निम्नलिखितम् Facade-प्रतिमानस्य सरलं कार्यान्वयन-उदाहरणम् अस्ति, यत् facade-वर्गाणां माध्यमेन उपतन्त्राणां उपयोगं कथं सरलीकरोति इति दर्शयति ।

1. उपतन्त्रवर्गान् परिभाषयन्तु
public class SubsystemA {
    public void operationA() {
        System.out.println("SubsystemA: operationA");
    }
}

public class SubsystemB {
    public void operationB() {
        System.out.println("SubsystemB: operationB");
    }
}

public class SubsystemC {
    public void operationC() {
        System.out.println("SubsystemC: operationC");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
2. रूपवर्गं परिभाषयन्तु
public class Facade {
    private SubsystemA subsystemA;
    private SubsystemB subsystemB;
    private SubsystemC subsystemC;

    public Facade() {
        this.subsystemA = new SubsystemA();
        this.subsystemB = new SubsystemB();
        this.subsystemC = new SubsystemC();
    }

    public void operation1() {
        System.out.println("Facade: operation1");
        subsystemA.operationA();
        subsystemB.operationB();
    }

    public void operation2() {
        System.out.println("Facade: operation2");
        subsystemB.operationB();
        subsystemC.operationC();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
3. ग्राहकसङ्केतः
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.operation1();
        facade.operation2();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

टिप्पणियाँ

  1. उपतन्त्रवर्गः

    • SubsystemA, SubsystemB, तथा SubsystemC उपतन्त्रस्य विशिष्टः कार्यान्वयनवर्गः अस्ति, प्रत्येकस्य वर्गस्य स्वकीया विशिष्टा संचालनविधिः अस्ति ।
  2. रूपवर्गः

    • Facade वर्गाः उपतन्त्रवस्तूनि धारयन्ति, सरलीकृतानि अन्तरफलकानि च प्रदास्यन्तिoperation1 तथाoperation2 उपतन्त्रकार्यं आह्वयितुं ।
  3. क्लायन्ट् कोड

    • Client वर्ग उत्तीर्णः अभवत्Facade class to call इतिoperation1 तथाoperation2, एवं जटिल उपतन्त्राणां उपयोगः सरलः भवति ।

लाभ

  1. सरलीकृतं अन्तरफलकं

    • रूपप्रतिमानं उपतन्त्राणां कृते सरलं अन्तरफलकं प्रदाति, उपतन्त्रैः सह अन्तरक्रियायाः जटिलतां न्यूनीकरोति ।
  2. शिथिलयुग्मनम्

    • उपस्थितिविधिः उपतन्त्रस्य ग्राहकस्य च मध्ये युग्मनं न्यूनीकरोति, यत् प्रणाल्याः परिपालनक्षमतां, मापनीयतां च सुधारयितुं साहाय्यं करोति ।
  3. उत्तमं स्तरीकरणम्

    • रूपप्रतिमानाः स्पष्टपदानुक्रमितसंरचनायाः स्थापनायां सहायकाः भवन्ति, प्रत्येकस्य स्तरस्य प्रवेशद्वारं परिभाषयन्ति ।

अभावः

  1. मुक्त-निमीप-सिद्धान्तस्य अनुपालनं न करोति

    • नूतनानि उपतन्त्रकार्यं योजयन्ते सति, रूपवर्गस्य परिवर्तनं आवश्यकं भवेत्, यत् मुक्त-बन्द-सिद्धान्तस्य (विस्तारस्य कृते उद्घाटितम्, परिवर्तनार्थं बन्दम्) उल्लङ्घयति
  2. कार्यप्रदर्शनस्य समस्याः उत्पद्यन्ते

    • केषुचित् सन्दर्भेषु, मुखौटाप्रतिमानस्य उपयोगेन प्रणालीप्रदर्शनस्य अवनतिः भवितुम् अर्हति यतोहि सर्वेषां अनुरोधानाम् मुखाकृतिवर्गेण गन्तुम् आवश्यकम् अस्ति ।

वर्ग आरेख

Client
  |
  v
Facade ----> SubsystemA
          ----> SubsystemB
          ----> SubsystemC
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

सारांशं कुरुत

Facade-प्रतिमानं सरल-अन्तरफलकं प्रदातुं जटिल-उपतन्त्रैः सह कार्यं सुलभं करोति । यत्र उपतन्त्र-अन्तरफलकस्य सरलीकरणं, ग्राहकस्य उपतन्त्रस्य च प्रत्यक्ष-अन्तर्क्रियायाः न्यूनीकरणं, प्रणाली-पदानुक्रमस्य वियुग्मनं च आवश्यकं भवति तत्र परिदृश्यानां कृते उपयुक्तम् अस्ति यद्यपि तस्य मुक्त-बन्द-सिद्धान्तस्य उल्लङ्घनस्य क्षमता अस्ति तथापि अधिकतया तस्य लाभाः तस्य हानिभ्यः दूरं अधिकं भवन्ति, येन प्रणाली-निर्माणं स्पष्टतरं, परिपालनं च सुकरं भवति