人妻少妇乱子伦精品_日韩人妻潮喷视频网站_日本最新最全无码不卡免费_日韩AV无码中文

當(dāng)前位置: 首頁 > 科技新聞 >

面向?qū)ο笾叽蠡驹瓌t(JavaScript)

時間:2019-11-13 00:41來源:網(wǎng)絡(luò)整理 瀏覽:
面向?qū)ο缶幊逃凶约旱奶匦耘c原則,如果對于面向?qū)ο笥幸恍┝私獾脑?,面向?qū)ο笕筇卣?,封裝、繼承、多態(tài),如果對面向?qū)@三個概念不太了解,請參考

面向?qū)ο笾叽蠡驹瓌t(JavaScript)

面向?qū)ο缶幊逃凶约旱奶匦耘c原則,如果對于面向?qū)ο笥幸恍┝私獾脑?,面向?qū)ο笕筇卣?,封裝、繼承、多態(tài),如果對面向?qū)@三個概念不太了解,請參考面向?qū)ο笾齻€基本特征(JavaScript)

單一職責(zé)

如果我們在編寫程序的時候,一類或者一個方法里面包含了太多方法,對于代碼的可讀性來說,無非是一場災(zāi)難,對于我們來說。所以為了解決這個問題,出現(xiàn)了單一職責(zé)。

什么是單一職責(zé)

單一職責(zé):又稱單一功能原則,面向?qū)ο笪鍌€基本原則(SOLID)之一。它規(guī)定一個類應(yīng)該只有一個發(fā)生變化的原因。(節(jié)選自百度百科)

按照上面說的,就是對一個類而言,應(yīng)該僅有一個引起它變化的原因。換句話說,一個類的功能要單一,只做與它相關(guān)的事情。在類的設(shè)計過程中要按職責(zé)進行設(shè)計,彼此保持正交,互不干涉。

單一職責(zé)的好處

實例

  

用上面的代碼來說ShoppinCar類存在兩個方法addGoods和getGoodsList,分別是添加商品和獲取商品列表。Settlement類中存在兩個方法calculatePrice和getAllPrice分別做的事情是計算價錢與獲取總價錢。ShoppinCar與Settlement都是在做自己的事情。添加商品與計算價格,雖然在業(yè)務(wù)上是相互依賴的,但是在代碼中分別用兩個類,然他們自己做自己的事情。其中任何一個類更改不會對另一個類進行更改。

開閉原則

在一個類中暴露出去的方法,若這個方法變更了,則會產(chǎn)生很大的后果,可能導(dǎo)致其他依賴于這個方法且有不需要變更的業(yè)務(wù)造成大面積癱瘓。為了解決這個問題,可以單獨再寫一個方法,若這個方法與這個類中的其他方法相互依賴。

解決辦法:

兩種方法都不是最好的解決方案。

第一種方法會導(dǎo)致代碼大量的重復(fù),第二種方法會導(dǎo)致類與類之間互相依賴。

什么是開閉原則

開閉原則:“軟件中的對象(類,模塊,函數(shù)等等)應(yīng)該對于擴展是開放的,但是對于修改是封閉的”,這意味著一個實體是允許在不改變它的源代碼的前提下變更它的行為。(節(jié)選自百度百科)

開閉原則對擴展開放,對修改關(guān)閉,并不意味著不做任何修改,底層模塊的變更,必然要有高層模塊進行耦合,否則就是一個孤立無意義的代碼片段。開閉原則是一個最基本的原則,另外六個原則都是開閉原則的具體形態(tài),是指導(dǎo)設(shè)計的工具和方法,而開閉原則才是精神領(lǐng)袖.

開閉原則好處

實例

  

在LimitDrag中重寫了move方法,若修改了可以滿足兩種需求,一種是限制型拖拽,一種是不限制型拖拽,任何一個更改了另外一個還是可以正常運行。

里氏替換

每個開發(fā)人員在使用別人的組件時,只需知道組件的對外裸露的接口,那就是它全部行為的集合,至于內(nèi)部到底是怎么實現(xiàn)的,無法知道,也無須知道。所以,對于使用者而言,它只能通過接口實現(xiàn)自己的預(yù)期,如果組件接口提供的行為與使用者的預(yù)期不符,錯誤便產(chǎn)生了。里氏替換原則就是在設(shè)計時避免出現(xiàn)派生類與基類不一致的行為。

什么是里氏替換

里氏替換原則:OCP作為OO的高層原則,主張使用“抽象(Abstraction)”和“多態(tài)(Polymorphism)”將設(shè)計中的靜態(tài)結(jié)構(gòu)改為動態(tài)結(jié)構(gòu),維持設(shè)計的封閉性。“抽象”是語言提供的功能。“多態(tài)”由繼承語義實現(xiàn)。(節(jié)選自百度百科)

里氏替換好處

實例

  

從上述代碼中可以看出,子類和父類之間關(guān)系,子類方法一定是等于或大于父類的方法。子類能夠出現(xiàn)的父類不一定能出現(xiàn),但是父類出現(xiàn)的地方子類一定能夠出現(xiàn)。

依賴倒置

如果方法與方法之間或類與類之間,存在太多的依賴關(guān)系會導(dǎo)致代碼可讀性以及可維護性很差。依賴倒置原則能夠很好的解決這些問題。

什么是依賴倒置

依賴倒置原則:程序要依賴于抽象接口,不要依賴于具體實現(xiàn)。簡單的說就是要求對抽象進行編程,不要對實現(xiàn)進行編程,這樣就降低了客戶與實現(xiàn)模塊間的耦合。(節(jié)選自百度百科)

依賴倒置好處

實例

  

從上面的代碼可以看出,步槍與狙擊槍的shoot全部都是依賴于AbstractGun抽象的槍類,上述編程滿足了依賴倒置原則。

接口隔離

什么是接口隔離

接口隔離:客戶端不應(yīng)該依賴它不需要的接口;一個類對另一個類的依賴應(yīng)該建立在最小的接口上。(節(jié)選自百度百科)

接口隔離原則與單一職責(zé)原則的審視角度不相同。單一職責(zé)原則要求是類和接口的職責(zé)單一,注重的職責(zé),這是業(yè)務(wù)邏輯上的劃分。接口隔離原則要求接口的方法盡量少。

接口隔離好處

實例

  

大家一定要好好分析一下上面的代碼,共有兩個抽象類,分別對應(yīng)不同的行為,Cat與Dog類擁有共同的行為,但是Cat又擁有其自己單獨的行為,使用抽象(即接口)繼承其方法,使用接口隔離使其完成各自的工作,各司其職。

迪米特法則

迪米特法則:最少知識原則(Least Knowledge Principle 簡寫LKP),就是說一個對象應(yīng)當(dāng)對其他對象有盡可能少的了解,不和陌生人說話。英文簡寫為: LoD.(節(jié)選自百度百科)

迪米特法則的做法觀念就是類間解耦,弱耦合,只有弱耦合了以后,類的復(fù)用率才可以提高。一個類應(yīng)該對其他對象保持最少的了解。通俗來講,就是一個類對自己依賴的類知道的越少越好。因為類與類之間的關(guān)系越密切,耦合度越大,當(dāng)一個類發(fā)生改變時,對另一個類的影響也越大。

迪米特法則好處

實例

  

上面代碼中Container作為媒介,其調(diào)用類不知道其內(nèi)部是如何實現(xiàn),用戶去觸發(fā)按鈕,Container把消息通知給計算機,計算機去執(zhí)行相對應(yīng)的命令。

組合/聚合復(fù)用原則

聚合(Aggregation)表示一種弱的‘擁有’關(guān)系,體現(xiàn)的是A對象可以包含B對象但B對象不是A對象的一部分。

合成(Composition)則是一種強的'擁有'關(guān)系,體現(xiàn)了嚴格的部分和整體關(guān)系,部分和整體的生命周期一樣。

組合/聚合:是通過獲得其他對象的引用,在運行時刻動態(tài)定義的,也就是在一個對象中保存其他對象的屬性,這種方式要求對象有良好定義的接口,并且這個接口也不經(jīng)常發(fā)生改變,而且對象只能通過接口來訪問,這樣我們并不破壞封裝性,所以只要類型一致,運行時還可以通過一個對象替換另外一個對象。

優(yōu)先使用對象的合成/聚合將有助于你保持每個類被封裝,并被集中在單個任務(wù)上,這樣類和類繼承層次會保持較小規(guī)模,而且不太可能增長為不可控制的龐然大物。

組合/聚合復(fù)用原則好處

實例

  

總結(jié)

這些原則在設(shè)計模式中體現(xiàn)的淋淋盡致,設(shè)計模式就是實現(xiàn)了這些原則,從而達到了代碼復(fù)用、增強了系統(tǒng)的擴展性。所以設(shè)計模式被很多人奉為經(jīng)典。我們可以通過好好的研究設(shè)計模式,來慢慢的體會這些設(shè)計原則。

【責(zé)任編輯:龐桂玉 TEL:(010)68476606】
推薦內(nèi)容