2023-08-24 分類: 網(wǎng)站建設(shè)
百度權(quán)重查詢 站長(zhǎng)交易 友情鏈接交換 網(wǎng)站監(jiān)控 服務(wù)器監(jiān)控 seo監(jiān)控
可靠的設(shè)計(jì)模式是可維護(hù)軟件的基石,假如你曾參與技術(shù)面試,很有可能被問(wèn)到關(guān)于設(shè)計(jì)模式的這類東西。下面這個(gè)指南中,我們將學(xué)習(xí)一些今天就可以用得著的設(shè)計(jì)模式。
什么是設(shè)計(jì)模式?
簡(jiǎn)單來(lái)說(shuō),設(shè)計(jì)模式就是對(duì)特定類型問(wèn)題重用的軟件解決方案,這些問(wèn)題在軟件開發(fā)的時(shí)候經(jīng)常會(huì)碰到,通過(guò)許多年的實(shí)踐,專家對(duì)一些相似地問(wèn)題總結(jié)出一些方法,這些方法就封裝成為一種設(shè)計(jì)模式,所以:
模式是一種經(jīng)驗(yàn)證的用于解決軟件開發(fā)問(wèn)題的方案。
模式是可擴(kuò)展的,因?yàn)樗麄兘?jīng)常被結(jié)構(gòu)化而且你需要遵循某些規(guī)則。
對(duì)于相似的問(wèn)題,模式可被重用
在接下來(lái)的教程中,我們將直接給出一些設(shè)計(jì)模式的例子。
設(shè)計(jì)模式的種類
軟件開發(fā)中,設(shè)計(jì)模式通常分為幾種類別,在這篇教程中我們重點(diǎn)介紹以下三種:
1、創(chuàng)建型模式專注于構(gòu)建對(duì)象或者類,對(duì)象的創(chuàng)建聽起來(lái)很簡(jiǎn)單(在某些情況下),但是大型應(yīng)用需要控制對(duì)象的創(chuàng)建過(guò)程。
2、結(jié)構(gòu)型設(shè)計(jì)模式專注于管理對(duì)象之間的關(guān)系使得應(yīng)用是用一種可擴(kuò)展的架,,結(jié)構(gòu)型模式關(guān)鍵點(diǎn)是確保在應(yīng)用程序中部分改變不會(huì)影響其他部分。
3、行為模式專注于對(duì)象間的通信
你可能在讀完這些簡(jiǎn)介的描述后仍然覺(jué)得有問(wèn)題,這很正常,一旦我們看完了這些模式的深入介紹后,問(wèn)題也會(huì)變得明朗起來(lái),所以接著往下看吧。
類在javascript中的注重點(diǎn):
當(dāng)我們讀設(shè)計(jì)模式時(shí),你經(jīng)常會(huì)提及到類和對(duì)象。這很疑惑,因?yàn)?#106avascript沒(méi)有真正“類”的構(gòu)造,一個(gè)更合適的術(shù)語(yǔ)叫“數(shù)據(jù)類型”。
javascript中的數(shù)據(jù)類型:
javascript是一門面向?qū)ο蟮恼Z(yǔ)言,一個(gè)對(duì)象繼續(xù)自其他對(duì)象,這個(gè)概念以原型繼續(xù)著稱。一個(gè)數(shù)據(jù)類型可以通過(guò)構(gòu)造函數(shù)創(chuàng)建,就像:
function Person(config) {
this.name = config.name;
this.age = config.age;
}
Person.prototype.getAge = function() {
return this.age;
};
var tilo = new Person({name:“Tilo”, age:23 });
console.log(tilo.getAge());
當(dāng)方法定義在Person數(shù)據(jù)類型中時(shí)注重prototype的使用,因?yàn)槎鄠€(gè)Person對(duì)象將引用統(tǒng)一個(gè)prototype,這樣就許可 getAge()方法可以被所有的Person數(shù)據(jù)類型的實(shí)例共享。而不是每個(gè)實(shí)例都重新定義一次,除此之外,任何繼續(xù)自Person的數(shù)據(jù)類型都可以訪問(wèn)getAge()方法。
處理私稀有據(jù)
在javascript中另一個(gè)常見(jiàn)的問(wèn)題是沒(méi)有真正意義上的私有變量,然而我們可以使用閉包
去模擬私有變量,考慮下面這代碼片段:
var retinaMacbook = (function() {
//Private variables
var RAM, addRAM;
RAM = 4;
//Private method
addRAM = function (additionalRAM) {
RAM += additionalRAM;
};
return {
//Public variables and methods
USB: undefined,
insertUSB: function (device) {
this.USB = device;
},
removeUSB: function () {
var device = this.USB;
this.USB = undefined;
return device;
}
};
})();
在上面這個(gè)例子中,我們創(chuàng)建了一個(gè)retinaMacbook對(duì)象,含有公有和私有變量及方法,可以這樣來(lái)使用它:
retinaMacbook.insertUSB(“myUSB”);
console.log(retinaMacbook.USB); //logs out “myUSB”
console.log(retinaMacbook.RAM) //logs out undefined
在javascript中函數(shù)和閉包可以做更多的事,但是我們?cè)谶@個(gè)教程中沒(méi)法涉及到方方面面,我們簡(jiǎn)短的學(xué)習(xí)了javascript的數(shù)據(jù)類型和私有變量?,F(xiàn)在我們可以學(xué)習(xí)設(shè)計(jì)模式了。
創(chuàng)建型設(shè)計(jì)模式:
有許多種不同的創(chuàng)建設(shè)計(jì)模式,但是在這里我們主要討論兩種,建造模式(Builder)和原型模式(Prototype)。
建造模式:
建造模式通常用于web開發(fā),有時(shí)你在使用它你卻還沒(méi)意識(shí)到。簡(jiǎn)而言之,這個(gè)模式可以定義如下:
“使用建造模式許可我們僅僅通過(guò)指定類型和內(nèi)容來(lái)構(gòu)造一個(gè)對(duì)象,我們不需要明確的創(chuàng)建對(duì)象。”
例如,你可能無(wú)數(shù)次的使用jQuery:
var myDiv = $(‘<div id=“myDiv”>This is a div.</div>’);
//myDiv now represents a jQuery object referencing a DOM node.
var someText = $(‘<p/>’);
//someText is a jQuery object referencing an HTMLParagraphElement
var input = $(‘<input />’);
看看上面這三個(gè)例子,個(gè),傳遞了一個(gè)<div/>元素附帶一些內(nèi)容,第二個(gè),傳遞一個(gè)空的<p>標(biāo)簽,第三個(gè),傳遞一個(gè)<input/>元素。這三個(gè)例子的效果都是一樣的:返回一個(gè)jQuery對(duì)象的引用指向一個(gè)DOM節(jié)點(diǎn)。
新聞標(biāo)題:理解javascript中的設(shè)計(jì)模式
分享網(wǎng)址:http://www.rwnh.cn/news33/278233.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、App開發(fā)、商城網(wǎng)站、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容