12.Javascript設計模式之代理模式—-Proxy

來源:互聯網
上載者:User
12.Javascript設計模式之代理模式----Proxy

理解並使用設計模式,能夠培養我們良好的物件導向編程習慣,同時在實際應用中,可以如魚得水,享受遊刃有餘的樂趣。本節我們討論Javascript設計模式中的:代理模式

概念

GOF:為其他對象提供一種代理以控制對這個對象的訪問。

Proxy是比較有用途的一種模式,而且變種較多,應用場合覆蓋從小結構到整個系統的大結構,Proxy是代理的意思,我們也許有Proxy 伺服器等概念。
代理概念可以解釋為:在出發點到目的地之間有一道中介層,意為代理。

為什麼要使用Proxy?

1.授權機制 不同層級的使用者對同一對象擁有不同的訪問權利,如Jive論壇系統中,就使用Proxy進行授權機制控制,訪問論壇有兩種人:註冊使用者和遊客(未註冊使用者),Jive中就通過類似ForumProxy這樣的代理來控制這兩種使用者對論壇的存取權限。

2.某個用戶端不能直接操作到某個對象,但又必須和那個對象有所互動。

舉例兩個具體情況:

  (1)如果那個對象是一個是很大的圖片,需要花費很長時間才能顯示出來,那麼當這個圖片包含在文檔中時,使用編輯器或瀏覽器開啟這個文檔,開啟文檔必須很迅速,不能等待大圖片處理完成,這時需要做個圖片Proxy來代替真正的圖片。

  (2)如果那個對象在Internet的某個遠端伺服器上,直接操作這個對象因為網路速度原因可能比較慢,那我們可以先用Proxy來代替那個對象。

總之原則是,對於開銷很大的對象,只有在使用它時才建立,這個原則可以為我們節省很多寶貴的Java記憶體. 所以,有些人認為Java耗費資源記憶體,我以為這和程式編製思路也有一定的關係。

代理模式樣本
var Publication = new Interface('Publication', ['getIsbn', 'setIsbn', 'getTitle', 'setTitle', 'getAuthor', 'setAuthor', 'display']);var Book = function(isbn, title, author) {    //...} // implements Publicationimplements(Book,Publication);/* Library interface. */var Library = new Interface('Library', ['findBooks', 'checkoutBook', 'returnBook']);/* PublicLibrary class. */var PublicLibrary = function(books) {    //...};// implements Libraryimplements(PublicLibrary,Library); PublicLibrary.prototype = {    findBooks: function(searchString) {       //...    },    checkoutBook: function(book) {        //...    },    returnBook: function(book) {        //...    }};/* PublicLibraryProxy class, a useless proxy. */var PublicLibraryProxy = function(catalog) {     this.library = new PublicLibrary(catalog);};// implements Libraryimplements(PublicLibraryProxy,Library);PublicLibraryProxy.prototype = {    findBooks: function(searchString) {        return this.library.findBooks(searchString);    },    checkoutBook: function(book) {        return this.library.checkoutBook(book);    },    returnBook: function(book) {        return this.library.returnBook(book);    }};

這個例子我就不做解釋了,應該能看得懂的HO...

Remark:如果你對Javascript設計模式非常感興趣,百度一下吧,(^o^)/~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.