日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式之代理模式,学习笔记

發(fā)布時(shí)間:2025/3/15 asp.net 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之代理模式,学习笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

不直接操作實(shí)體對(duì)象,而是借助另外一個(gè)對(duì)象來操作它,這樣的話,我們可以在實(shí)體對(duì)象編寫核心代碼,而用代理對(duì)象來編寫條件等等,如果滿足就訪問實(shí)體對(duì)象。這樣的話當(dāng)你不需要條件的時(shí)候,我們只是需要把代理對(duì)象刪除,其他的都不不用去改變。簡(jiǎn)單來講所謂的代理模式就是通過另外一個(gè)人來幫它完成一部分的任務(wù),減輕壓力。如下:

var sayHello = function(){
  console.log('Hello World');
};

var cHello = function(name){
  if(name==='老王'){
    sayHello();
  }
};

cHello('老王'); //Hello World
cHello('老李');

  sayHello是核心代碼,而cHello是代理,比如原本項(xiàng)目的需求是不管是訪問sayHello都執(zhí)行console.log而需求有些變化,只有老王訪問的時(shí)候才執(zhí)行sayHello。如果下次再改變我們只需要?jiǎng)哟眍惥托?#xff0c;而不需要去修改核心的類,突然發(fā)現(xiàn)其實(shí)這種很有好處的,比如你根本一開始就不需要去考慮代理,但項(xiàng)目需要更改的時(shí)候再去寫代理類,也是一樣的,哈。

?

  使用代理模式的另外一個(gè)好處就是,比如頁面中我們不一定一開始就需要加載所有的JS代碼,一部分是根據(jù)一些情況才進(jìn)行加載的,但我們又允許用戶提前是使用這些功能,這個(gè)時(shí)候我們就可以設(shè)計(jì)一個(gè)代理類,讓用戶來訪問這個(gè)代理類,將數(shù)據(jù)保存到代理類里面,而到需要的時(shí)候再訪問實(shí)際的類。

var sayHello = function(){
  console.log('Hello World');
};

var cHello = function(){
  setTimeout(function(){
    sayHello();
  },2000)
};


cHello(); //Hello World

  多少有些像亡羊補(bǔ)牢的感覺,一步一步的加條件。


  另外使用代理模式配合緩存機(jī)制可以極大的提高性能,比如我們可以通過代理來保存一些數(shù)據(jù),如果這個(gè)數(shù)據(jù)已經(jīng)技術(shù)過了那么我們直接返回這個(gè)數(shù)據(jù),如果沒有計(jì)算過那么再訪問源對(duì)象進(jìn)行計(jì)算。

//核心
var count = function(){
  var a = 0;
  for(var i=0,c;c=arguments[i++];){
    a+=c; //c = arguments[i]
  }
  return a;
};

//代理
var fcount = (function(){
  //保存緩存的數(shù)據(jù)
  var obj = {};
  return function(){
    var arg = arguments;
    var temp = Array.prototype.join.call(arg,',');
    if(temp in obj){
      console.log('ok');//用來測(cè)試是否有使用緩存的數(shù)據(jù)
      return obj[temp];
    }
    return obj[temp] = count.apply(null,arg);
  };

}());

console.log(fcount(2,3)); //5
console.log(fcount(2,3)); //ok 5
console.log(fcount(2,3,5));//10
console.log(fcount(2,3,5));// ok 10


  總之代理模式還是很有意思的,你可以先去實(shí)現(xiàn)核心代碼,如果項(xiàng)目比較趕你也可以不使用代理來訪問,有時(shí)間的話去優(yōu)化。

  

  其實(shí)這些說的都是一個(gè)意思,就是核心的不動(dòng),修改的只是代理類。

轉(zhuǎn)發(fā)自:http://www.cnblogs.com/pssp/p/5793065.html

轉(zhuǎn)載于:https://www.cnblogs.com/smallroc/p/6596511.html

總結(jié)

以上是生活随笔為你收集整理的设计模式之代理模式,学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。