国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

JavaScript設計模式之代理模式實例分析

來源:懂視網 責編:小采 時間:2020-11-27 22:02:13
文檔

JavaScript設計模式之代理模式實例分析

JavaScript設計模式之代理模式實例分析:本文實例講述了JavaScript設計模式之代理模式。分享給大家供大家參考,具體如下: 代理模式的定義,代理是一個對象(proxy)用它來控制目標對象的訪問。為此他要是先與目標對象相同的接口,但是他不同于裝飾者模式,它對目標對象不進行任何修改,它的目的在于延
推薦度:
導讀JavaScript設計模式之代理模式實例分析:本文實例講述了JavaScript設計模式之代理模式。分享給大家供大家參考,具體如下: 代理模式的定義,代理是一個對象(proxy)用它來控制目標對象的訪問。為此他要是先與目標對象相同的接口,但是他不同于裝飾者模式,它對目標對象不進行任何修改,它的目的在于延

本文實例講述了JavaScript設計模式之代理模式。分享給大家供大家參考,具體如下:

代理模式的定義,代理是一個對象(proxy)用它來控制目標對象的訪問。為此他要是先與目標對象相同的接口,但是他不同于裝飾者模式,它對目標對象不進行任何修改,它的目的在于延緩"復雜"對象的初始化時間。這樣可以在用到這個目標對象的時候再初始化他(對于單例來講更是重要)。

代理模式有兩種分類:

(1)普通代理

(2)惰性代理

具體看下面的例子

第一,普通代理模式

步驟一,接口檢驗文件的引用

//定義一個靜態方法來實現接口與實現類的直接檢驗
//靜態方法不要寫出Interface.prototype ,因為這是寫到接口的原型鏈上的
//我們要把靜態的函數直接寫到類層次上
//定義一個接口類
var Interface=function (name,methods) {//name:接口名字
 if(arguments.length<2){
 alert("必須是兩個參數")
 }
 this.name=name;
 this.methods=[];//定義一個空數組裝載函數名
 for(var i=0;i<methods.length;i++){
 if(typeof methods[i]!="string"){
 alert("函數名必須是字符串類型");
 }else {
 this.methods.push( methods[i]);
 }
 }
};
Interface.ensureImplement=function (object) {
 if(arguments.length<2){
 throw new Error("參數必須不少于2個")
 return false;
 }
 for(var i=1;i<arguments.length;i++){
 var inter=arguments[i];
 //如果是接口就必須是Interface類型
 if(inter.constructor!=Interface){
 throw new Error("如果是接口類的話,就必須是Interface類型");
 }
 //判斷接口中的方法是否全部實現
 //遍歷函數集合分析
 for(var j=0;j<inter.methods.length;j++){
 var method=inter.methods[j];//接口中所有函數
 //object[method]傳入的函數
 //最終是判斷傳入的函數是否與接口中所用函數匹配
 if(!object[method]||typeof object[method]!="function" ){//實現類中必須有方法名字與接口中所用方法名相同
 throw new Error("實現類中沒有完全實現接口中的所有方法")
 }
 }
 }
}

步驟二,目標類

(1)圖書類

//圖書類
/*
* bid 圖書id
* bName 圖書名稱
* bPrice 圖書價格
* */
var Book = function(bid,bName,bPrice){
 this.bid = bid;
 this.bName = bName;
 this.bPrice = bPrice;
}

(2)真正的目標類

//目標類
var myBookShop=(function () {
 //書店里的書
 var books={};
 return function (bks) {
 //初始化
 if(typeof bks=="object"){
 books=bks;
 }
 //加書
 this.addBook = function(book){
 books[book.bid] = book;
 }
 //找書
 this.findBook=function (bid) {
 if(books[bid]){
 return books[bid];
 }else {
 return null;
 }
 }
 //還書
 this.returnBook=function (book) {
 this.addBook(book);
 }
 //借書
 this.lendBook=function (bid) {
 var book=this.findBook(bid);
 return book;
 }
 }
})();

步驟三,普通代理

var myBookShopProxy=function (bks) {
 var obj=new myBookShop(bks);//類似于目標類的引用
 //加書
 this.addBook=function (book) {
 obj.addBook(book);
 }
 //找書
 this.findBook = function(bid){
 return obj.findBook(bid);
 }
 //還書
 this.returnBook=function (book) {
 obj.returnBook(book);
 }
 //借書
 this.lendBook=function (bid) {
 return obj.lendBook(bid);
 }
}

步驟四,添加數據后,開始訪問

var proxy = new myBookShopProxy({
 "001":new Book("001","EXTJS","45"),
 "002":new Book("002","JS","60")
})
alert(proxy.lendBook("001").bName)

在普通的代理模式中,我們可以看出代理中對目標對象的引用是一次性初始化的,然后再在該基礎上實現其他操作

如圖:目標類和代理同時實現了同一接口。代理中一次性對目標類進行實例,然后值訪問到目標類中的方法。

總結,這個代理是我們嚴格安裝定義來寫的,一般開發中不會用到,應為他沒什么意義。

第二種,惰性代理----在使用時才對目標類進行初始化再引用。

對代理部分的修改如下,其余部分相同,代碼如下

//惰性代理---在使用時在初始化目標類的引用
var myBookShopProxy=function (bks) {
 var obj=null;
 this._init=function () {
 obj=new myBookShop(bks);
 }
 //加書
 this.addBook=function (book) {
 this._init();
 obj.addBook(book);
 }
 //找書
 this.findBook=function (bid) {
 this._init();
 obj.findBook(bid);
 }
 //還書
 this.returnBook=function (book) {
 this._init();
 obj.returnBook(book);
 }
 //借書
 this.lendBook=function (bid) {
 this._init();
 return obj.lendBook(bid);
 }
}

修改后的代理執行過程,如圖

更多關于JavaScript相關內容還可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript設計模式之代理模式實例分析

JavaScript設計模式之代理模式實例分析:本文實例講述了JavaScript設計模式之代理模式。分享給大家供大家參考,具體如下: 代理模式的定義,代理是一個對象(proxy)用它來控制目標對象的訪問。為此他要是先與目標對象相同的接口,但是他不同于裝飾者模式,它對目標對象不進行任何修改,它的目的在于延
推薦度:
標簽: 模式 設計 實例
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产成人精品999在线观看 | 欧美在线二区 | 欧美福利在线观看 | 亚洲三级电影网站 | 国产亚洲视频在线观看 | 亚洲逼院 | 欧美一区不卡二区不卡三区 | 亚洲风情第一页 | 欧美视频在线免费 | 日韩在线二区 | www欧美在线观看 | 中文字幕欧美在线 | 欧美在线亚洲 | 国产在线精品一区二区三区不卡 | 亚洲va欧美| 亚洲欧美日韩综合在线播放 | 国产不卡视频在线播放 | 看全色黄大色大片免费久久久 | 亚洲视频网站在线观看 | 日韩精品在线免费观看 | 日韩αv| 欧美一区二区在线 | 成人亚洲国产精品久久 | 国产欧美二区 | 国产一区二区三区日韩欧美 | 欧美色视频在线 | 日韩一页| 欧美一区二区三区在线播放 | 国产高清在线免费观看 | 亚洲尹人九九大色香蕉网站 | 精品久久久久久国产牛牛app | 伊人久久大香线蕉综合爱婷婷 | 成人精品久久 | 久草青青视频 | 欧美黄色小视频 | 岛国一区二区 | 永久免费观看的毛片的网站下载 | 啪啪综合网 | 欧美雌雄双性人交xxxx | 美女一丝不佳一级毛片大屁股 | 国产成人青青热久免费精品 |