2010-09-02 9 views
75

jQuery में डिज़ाइन पैटर्न का उपयोग डीओएम पर अत्यधिक केंद्रित है और इसके आसपास एक अच्छा अमूर्तता प्रदान करता है। ऐसा करने में, यह विभिन्न प्रसिद्ध का उपयोग करता है जो मुझे कल कल मारा। एक स्पष्ट उदाहरण Decorator पैटर्न होगा। JQuery ऑब्जेक्ट नियमित DOM ऑब्जेक्ट के आस-पास नई और अतिरिक्त कार्यक्षमता प्रदान करता है।jQuery लाइब्रेरी

उदाहरण के लिए, डीओएम के मूल insertBefore विधि है लेकिन कोई संबंधित सम्मिलित विधि नहीं है। वहाँ विभिन्न कार्यान्वयन available इस अंतर को भरने के लिए कर रहे हैं, और jQuery ऐसे ही एक पुस्तकालय है कि इस सुविधा प्रदान करता है है:

$(selector).after(..) 
$(selector).insertAfter(..) 

डेकोरेटर पैटर्न के कई अन्य उदाहरण भारी jQuery में इस्तेमाल किया जा रहा हैं।

डिज़ाइन पैटर्न के बड़े या छोटे, क्या आपने उदाहरणों को देखा है कि लाइब्रेरी का हिस्सा हैं? इसके अलावा, कृपया पैटर्न के उपयोग का एक उदाहरण प्रदान करें।

इसे एक समुदाय विकी बनाना क्योंकि मुझे विश्वास है कि विभिन्न चीजें जो लोग jQuery के बारे में प्यार करते हैं उन्हें वापस ज्ञात डिज़ाइन पैटर्न पर देखा जा सकता है, केवल उन्हें पैटर्न के नाम से संदर्भित नहीं किया जाता है। इस सवाल का कोई जवाब नहीं है, लेकिन इन पैटर्नों को सूचीबद्ध करने से लाइब्रेरी में एक उपयोगी अंतर्दृष्टि प्रदान की जाएगी।

उत्तर

87

Lazy Initialization:

$(document).ready(function(){ 
    $('div.app').myPlugin(); 
}); 

Adapter or wrapper

$('div').css({ 
    opacity: .1 // opacity in modern browsers, filter in IE. 
}); 

Facade

// higher level interfaces (facades) for $.ajax(); 
$.getJSON(); 
$.get(); 
$.getScript(); 
$.post(); 

Observer

// jQuery utilizes it's own event system implementation on top of DOM events. 
$('div').click(function(){}) 
$('div').trigger('click', function(){}) 

Iterator

$.each(function(){}); 
$('div').each(function(){}); 

Strategy

$('div').toggle(function(){}, function(){}); 

Proxy

$.proxy(function(){}, obj); // =oP 

Builder

$('<div class="hello">world</div>'); 

Prototype

// this feels like cheating... 
$.fn.plugin = function(){} 
$('div').plugin(); 

Flyweight

// CONFIG is shared 
$.fn.plugin = function(CONFIG){ 
    CONFIG = $.extend({ 
     content: 'Hello world!' 
    }, CONFIG); 
    this.html(CONFIG.content); 
} 
+0

अच्छा काम वहाँ :) .. मुझे लगता है कि '$ .ajax' के लिए फेकाडे पैटर्न [टेम्पलेट विधि] (http://en.wikipedia.org/wiki/Template_method_pattern) पैटर्न जैसा दिखता है क्योंकि हमारे पास आधार कार्यक्षमता है , और प्रत्येक अतिरिक्त विधि जैसे '$ .get' आधार को ओवरराइड करता है और इसे और अधिक विशिष्ट बनाता है। – Anurag

+4

ये, बहुत सारे jQuery तरीके और वास्तव में जावास्क्रिप्ट सामान्य रूप से डिजाइन पैटर्न के असंख्य रूप से पालन कर सकते हैं। यह सामान्य रूप से जावास्क्रिप्ट की अभिव्यक्तिशील शक्ति का एक प्रमुख उदाहरण है और कैसे कार्यात्मक प्रोग्रामिंग ऑब्जेक्ट उन्मुख प्रोग्रामिंग का पूरक हो सकती है। =) – BGerrissen

5

कैसे सिंगलटन/मॉड्यूल पैटर्न के बारे में, के रूप में YUI के बारे में इस लेख में चर्चा: http://yuiblog.com/blog/2007/06/12/module-pattern/

मेरा मानना ​​है कि jQuery इसके मूल में इस पद्धति का उपयोग करता है, और साथ ही पैटर्न का उपयोग करने के लिए प्लग में डेवलपर्स को प्रोत्साहित। इस पैटर्न का उपयोग ग्लोबल नेमस्पेस को अव्यवस्था से दूर रखने का एक आसान और कुशल तरीका है, जो डेवलपर्स को स्वच्छ, encapsulated कोड लिखने में सहायता करके और अधिक उपयोगी है।

+0

jQuery अपने मूल में विभिन्न स्थानों पर मॉड्यूल पैटर्न का उपयोग करता है, और इसे छोटे प्लगइन से अधिक के लिए प्लगइन डेवलपर्स के लिए भी अनुशंसा करता है। महान खोज :) – Anurag

13

Composite पैटर्न का भी सामान्य रूप से jQuery में उपयोग किया जाता है। अन्य पुस्तकालयों के साथ काम करने के बाद, मैं देख सकता हूं कि यह पैटर्न इतना स्पष्ट नहीं है क्योंकि यह पहली नजर में दिखता है। पैटर्न मूल रूप से कहता है कि,

ऑब्जेक्ट्स का एक समूह किसी ऑब्जेक्ट के एक उदाहरण के समान व्यवहार किया जाना चाहिए।

उदाहरण के लिए, जब एक डोम तत्व या DOM तत्वों के एक समूह के साथ काम कर, दोनों एक समान तरीके से इलाज किया जा सकता।

$('#someDiv').addClass('green'); // a single DOM element 

$('div').addClass('green');  // a collection of DOM elements 
2

कार्यात्मक प्रोग्रामिंग की आँखों में, jQuery एक इकाई है। एक मोनाड एक ऐसी संरचना है जो किसी ऑब्जेक्ट को किसी क्रिया को पास करती है, संशोधित ऑब्जेक्ट लौटाती है और इसे अगली कार्रवाई पर भेज देती है। एक असेंबली लाइन की तरह।

Wikipedia article परिभाषा को बहुत अच्छी तरह से कवर करता है।

+0

मुझे लगता है कि यहां मोनड लाइब्रेरी की चेनिंग क्षमता का मतलब है! – Jebin

+0

वही है जो मैं यहां वर्णन कर रहा हूं। – nimrod

संबंधित मुद्दे