2010-09-02 29 views
75

jQuery tập trung cao vào DOM và cung cấp một trừu tượng tốt đẹp xung quanh nó. Trong khi làm như vậy, nó làm cho việc sử dụng khác nhau nổi tiếng mà chỉ cần đánh tôi ngày hôm qua. Một ví dụ rõ ràng sẽ là mẫu Decorator. Đối tượng jQuery cung cấp chức năng mới và bổ sung xung quanh một đối tượng DOM thông thường. Ví dụ: DOM có phương thức gốc insertBefore nhưng không có phương thức insertAfter tương ứng. Có nhiều triển khai available để lấp đầy khoảng trống này, và jQuery là một thư viện như vậy mà cung cấp chức năng này:Các mẫu thiết kế được sử dụng trong thư viện jQuery

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

Có rất nhiều ví dụ khác về mô hình trang trí được sử dụng nhiều trong jQuery.

Ví dụ nào khác, lớn hay nhỏ, về các mẫu thiết kế mà bạn nhận thấy là một phần của chính thư viện? Ngoài ra, vui lòng cung cấp ví dụ về cách sử dụng mẫu.

Làm cho trang wiki này trở thành một cộng đồng wiki vì tôi tin rằng nhiều thứ mà mọi người yêu thích về jQuery có thể được tìm lại theo các mẫu thiết kế nổi tiếng, chỉ là chúng không được gọi bằng tên mẫu. Không có câu trả lời cho câu hỏi này, nhưng việc lập danh mục các mẫu này sẽ cung cấp một cái nhìn sâu sắc hữu ích vào chính thư viện đó.

Trả lời

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

công việc tốt đẹp có :) .. Tôi nghĩ rằng mô hình mặt tiền cho '$ .ajax' giống như mô hình [mẫu phương pháp] (http://en.wikipedia.org/wiki/Template_method_pattern) như chúng ta có chức năng cơ bản và mỗi phương thức bổ sung như '$ .get' sẽ ghi đè cơ sở và làm cho nó cụ thể hơn. – Anurag

+4

Yeh, rất nhiều phương pháp jQuery và JavaScript thực sự nói chung có thể tuân thủ vô số các mẫu thiết kế cùng một lúc. Đó là một ví dụ điển hình về sức mạnh biểu đạt của JavaScript nói chung và cách lập trình chức năng có thể bổ sung cho lập trình hướng đối tượng. =) – BGerrissen

5

Làm thế nào về mô hình Singleton/Module, như đã thảo luận trong bài viết này về YUI: http://yuiblog.com/blog/2007/06/12/module-pattern/

Tôi tin rằng jQuery sử dụng mô hình này trong lõi của nó, cũng như khuyến khích các nhà phát triển plug-in để sử dụng các mô hình. Sử dụng mẫu này là một cách tiện dụng và hiệu quả để giữ không gian tên toàn cầu rõ ràng là lộn xộn, điều này hữu ích hơn nữa bằng cách hỗ trợ các nhà phát triển viết mã sạch, đóng gói.

+0

jQuery không sử dụng mẫu Mô-đun ở các vị trí khác nhau trong lõi của nó và cũng khuyên bạn nên sử dụng mô hình này cho các nhà phát triển plugin cho nhiều plugin nhỏ hơn. Tuyệt vời tìm thấy :) – Anurag

13

Mẫu Composite cũng rất thường được sử dụng trong jQuery. Đã làm việc với các thư viện khác, tôi có thể thấy mô hình này không rõ ràng như thế nào khi nhìn vào cảnh đầu tiên. Mô hình cơ bản nói rằng,

một nhóm đối tượng sẽ được xử lý giống như một trường hợp đơn lẻ của đối tượng.

Ví dụ: khi giao dịch với một phần tử DOM đơn lẻ hoặc một nhóm phần tử DOM, cả hai có thể được xử lý một cách thống nhất.

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

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

Trong con mắt của lập trình chức năng, jQuery là một đơn nguyên. Một Monad là một cấu trúc chuyển một đối tượng tới một hành động, trả về đối tượng đã sửa đổi và chuyển nó cho hành động tiếp theo. Giống như một dây chuyền lắp ráp.

Wikipedia article bao gồm định nghĩa rất tốt.

+0

Tôi nghĩ đơn nguyên ở đây có nghĩa là khả năng chuỗi của thư viện! – Jebin

+0

Đó chính xác là những gì tôi mô tả ở đây. – nimrod

Các vấn đề liên quan