北京赛车 pk10开奖记录_Toyou热购彩票官网
香港高速VIP雲機房火爆上線啦!無需備案菩簧,開通即用!配套《巔雲自助建站系統3.0》將帶給您飛一般的可視化拖拽建站體驗侵臀縛,歡迎免費體驗看回涪。

扣丁學堂培訓之PHP面向對象五大原則之接口隔離原則(ISP)詳解

一佰互聯網站制作(www.yinxi.net) 發布日期 2019-03-29 10:49:32 瀏覽數: 26

簡介瘟狠︰本篇文章扣丁學堂PHP在線學習小編主要和和大家分享一下PHP面向對象接口隔離原則(ISP)湘,文章中將會詳細分析接口隔離的概念未軟、原理梅、使用方法及相關操作注意事項畏挖販,對PHP開發感興趣或者是正在參加PHP培訓的小伙伴可以好 ...

本篇文章扣丁學堂PHP在線學習小編主要和和大家分享一下PHP面向對象接口隔離原則(ISP)短喬褂,文章中將會詳細分析接口隔離的概念敞粗、原理靡、使用方法及相關操作注意事項煎絨飄,對PHP開發感興趣或者是正在參加PHP培訓的小伙伴可以好好的了解一下茅。


扣丁學堂培訓之PHP面向對象五大原則之接口隔離原則(ISP)詳解

PHP在線學習


設計應用程序的時候轟茨,如果一個模塊包含多個子模塊午阿冬,那麼我們應該小心對模塊做出抽象烘。設想該模塊由一個類實現酚,我們可以把系統抽象成一個接口翟亂。但是要添加一個新的模塊擴展程序時烏哭,如果要添加的模塊只包含原系統中的一些子模塊瘓,那麼系統就會強迫我們實現接口中的所有方法迫,並且清寒要編寫一些啞方法眷陀。這樣的接口被稱為肚胖接口或者被污染的接口日,使用這樣的接口將會給系統引入一些不當的行為泌,這些不當的行為可能導致不正確的結果搜府,也可能導入資源浪費襯。

1.接口隔離

接口隔離原則(InterfaceSegregationPrinciple,ISP)表明客戶端不應該被強迫實現一些他們不會使用的接口熬,應該把胖接口中的方法分組芬砂狽,然後用多個接口替代它輔惜娠,每個接口服務于一個子模塊袖奪。簡單地說短,就是使用多個專門的接口比使用單個接口要好很多囊叛。

ISP的主要觀點如下渴甫密︰

1)一個類對另外一個類的依賴性應當是建立在最小的接口上的仟仇乾。

ISP可以達到不強迫客戶(接口的使用方法)依賴于他們不用的方法勞,接口的實現類應該只呈現為單一職責的角色(遵循SRP原則)

ISP還可以降低客戶之間的相互影響---當某個客戶要求提供新的職責(需要變化)而迫使接口發生改變時操島罵,影響到其他客戶程序的可能性最小雄捆刻。

2)客戶端程序不應該依賴它不需要的接口方法(功能)菜璃。

客戶端程序就應該依賴于它不需要的接口方法(功能)泌八貧,那依賴于什麼?依賴它所需要的接口兜瞳赤。客戶端需要什麼接口就是提供什麼接口賂雷,把不需要的接口剔除茂,這就要求對接口進行細化汕巒壕,保證其純潔性靖瘧腹。

比如在繼承時擔粒,由于子類將繼承父類中的所有可用方法;而父類中的某些方法問燎廠,在子類中可能並不需要囪書剎。例如顴膽,普通員工和經理都繼承自雇員這個接口虛醚,員工需要每天寫工作日志檀蓖,而經理不需要淮繃捕。因此不能用工作日志來卡經理紅李,也就是經理不應該依賴于提交工作日志這個方法羚汰溉。

可以看出肆狽扔,ISP和SRP在概念上是有一定交叉的淳韓。事實上骸,很多設計模式在概念上都有交叉蒙躲笨,甚至你很難判斷一段代碼屬于哪一種設計模式灣離僕。

ISP強調的是接口對客戶端的承諾越少越好賂,並且要做到專一緩斗盼。當某個客戶程序的要求發生變化庭葷,而迫使接口發生改變時忙,影響到其他客戶程序的可能性小痕濕。這實際上就是接口污染的問題不。

2.對接口的污染

過于臃腫的接口設計是對接口的污染蓉柬醋。所謂的接口污染就是為接口添加不必要的職責滇蠟佛,如果開發人員在接口中增加一個新功能的目的只是減少接口實現類的數目秒,則此設計將導致接口被不斷地"污染"並"變胖"潛。

"接口隔離"其實就是定制化服務設計的原則欣錄漿。使用接口的多重繼承實現對不同的接口的組合定椽祭,從而對外提供組合功能---達到"按需提供服務"襖杴憨。

接口即要拆姓躲孫,但也不能拆得太細謝,這就得有個標準辯哥,這就是高內聚段。接口應該具備一些基本的功能降,能獨一完成一個基本的任務尸。

在實際應用中燦,會遇到如下問題琶慘通︰比如宿咕杴,我需要一個能適配多種類型數據庫的DAO實現錳,那麼首先應實現一個數據庫操作的接口侈,其中規定一些數據庫操作的基本方法蛋測哦,比如連接數據庫撅挫染、增刪改查匡燃、關閉數據庫等謀不。這是一個最少功能的接口入。對于一些MySQL中特有的而其他數據庫里並不存在的或性質不同的方法歸,如PHP里可能用到的MySQL的pconnect方法究姜禿,其他數據庫里並不存在和這個方法相同的概念顴狠梁,這個方法也就不應該出現在這個基本的接口里獎,那這個基本的接口應該有哪些基本的方法呢?PDO已經告訴你了蓋。

PDO是一個抽象的數據庫接口層邦疾虎,它告訴我們一個基本的數據庫操作接口應該實現哪些基本的方法混。接口是一個高層次的抽象裂堵,所以接口里的方法都應該是通用的琶、基本的活、不易變化的屑鬼促。

還有一個問題筆鵝輝,那些特有的方法應該怎麼實現?根據ISP原則恨,這些方法可以在別一個接口中存在踞,讓這個"異類"同時實現這兩個接口戈徽毋。

對于接口的污染嚏簧堅,可以考慮這兩條處理方式太徽︰

利用委托分離接口池。

利用多繼承分離接口返脆。

委托模式中炒樂,有兩個對象參與處理同一個請求崗廣田,接受請求的對象將請求委托給另一個對象來處理睬賒,如策略模式淘壁嗅、代理模式等中都應用到了委托的概念搶凡廂。

再來看一下實例說明

你是否遇到過非常"胖"的接口呢?

舉個例子來說吧貉︰有一個跟動物有關的接口項擋,代碼如下艦輔︰

<?php

interfaceAnimal{

publicfunctionwalk();

publicfunctionspeak();

}

狗是這個接口的一個具體實現巨擔蛔︰

<?php

require_once"animal.php";

classDogimplementsAnimal{

publicfunctionwalk(){

echo"dogscanwalk";

}

publicfunctionspeak(){

echo"dogscanspeak";

}

}

ok礎僕澄,現在我們想創建一個魚類喂侍,它會游泳妮,怎麼辦呢?我們必須要修改接口蓉得,還會影響到dog類的實現尸,而fish也需要實現walk和speak方法韓話,如下代碼所示喘︰

Animal接口類熬︰

<?php

interfaceAnimal{

publicfunctionwalk();

publicfunctionspeak();

publicfunctionswim();

}

dog類豪忱︰

<?php

require_once"animal.php";

classDogimplementsAnimal{

publicfunctionwalk(){

echo"dogscanwalk";

}

publicfunctionspeak(){

echo"dogscanspeak";

}

publicfunctionswim(){

}

}

fish類壞尺惰︰

<?php

require_once"animal.php";

classFishimplementsAnimal{

publicfunctionwalk(){

}

publicfunctionspeak(){

}

publicfunctionswim(){

echo"fishcanswim";

}

}

這時Animal接口類就呈現出了"胖"接口的特征了骸破。所謂胖接口其實就是接口中定義了不是所有實現類都需要的方法播級,就像Animal接口類扁饑甜,有些動物是不會游泳的極,有些動物是不會行走的間,還有些動物是不會飛的遍裙碑。如果將這些方法都寫在一個Animal接口類中撾己,那麼後期的擴展和維護簡直就是一場災難鼎母薯。

那麼蛔挨,怎麼解決以上問題呢?

很簡單似,接口細化即可琳露,將Animal接口類拆分成三個接口類綿︰

animalCanWalk接口類滇桓斤︰

<?php

interfaceanimalCanSpeak{

publicfunctionspeak();

}

AnimalCanSwim接口類盼範︰

<?php

interfaceAnimalCanSwim{

publicfunctionswim();

}

animalCanSpeak接口類燎烹︰

<?php

interfaceanimalCanSpeak{

publicfunctionspeak();

}

定義好這幾個接口類之後殊教杉,dog和fish的實現就容易多了賀赴煎,

<?php

require_once"animalCanSpeak.php";

require_once"animalCanWalk.php";

classDogimplementsanimalCanSpeak,animalCanWalk{

publicfunctionwalk(){

echo"dogscanwalk";

}

publicfunctionspeak(){

echo"dogscanspeak";

}

}

<?php

require_once"animalCanSwim.php";

classFishimplementsAnimalCanSwim{

publicfunctionswim(){

echo"fishcanswim";

}

}

總結一下淮︰

接口隔離原則(InterfaceSegregationPrinciple,ISP)的概念睫︰使用多個專門的接口剿頻搬,而不使用單一的總接口岡,即客戶端不應該依賴那些它不需要的接口對日胺。

在使用接口隔離原則時瀝定,我們需要注意控制接口的粒度雇霉承,接口不能太鋅 ,如果太小會導致系統中接口泛濫私,不利于維護;接口也不能太大房婚對,太大的接口將違背接口隔離原則吮齡,靈活性較差泄晦,使用起來很不方便物敢。一般而言鵲,接口中僅包含為某一類用戶定制的方法即可館涪必,不應該強迫客戶依賴于那些它們不用的方法蠕鋪褂。

以上就是扣丁學堂PHP在線學習小編給大家分享的PHP面向對象五大原則之接口隔離原則(ISP)詳解鉗失喜,希望能幫到小伙伴們痊腺搪,想要了解更多內容的小伙伴可以登錄扣丁學堂官網查詢巷。扣丁學堂是專業的PHP在線學習基地跡構,有大量的PHP視頻教程供小伙伴觀看學習哦剖幢。

本文僅代表作者個人觀點驢,不代表巔雲官方發聲勾,對觀點有疑義請先聯系作者本人進行修改卑,若內容非法請聯系平台管理員胯,郵箱2522407257@qq.com礬干話。更多相關資訊筏崔,請到巔雲www.yinxi.net學習互聯網營銷技術請到巔雲建站www.yx10011.com睦檔冊。
一佰互聯是全國知名建站品牌服務商,我們有九年網站建設洞、網站制作賦礎、網頁設計俗、php開發和域名注冊及虛擬主機服務經驗妓扳篡,提供的自助建站服務更是全國有名鉚認。近年來還整合團隊優勢自主開發了可視化多用戶”巔雲建站系統“3.0平台版紡,拖拽排版網站制作設計類咐乘,輕松實現pc站閨、手機微網站晃鐐狠、小程序喘項豆、APP一體化全網營銷網站建設 百短榮,已成功的為全國上百家網絡公司提供自助建站平台搭建服務嘛。

相關新聞more

18
06月
代理賺錢第一步淚︰如何選擇域名主機服務商

很多人都說做域名主機代理賺不到錢哭慶帽,其實很多時候是賺錢的方法錯了內蛋,大家都知道屁馱,做域名空間代理要想賺錢新文,跟選一個好的代理商有很大的關系梯炯妻,因此幫,做... >>詳情

08
04月
設計師如何渡過最艱難的前三年?來看前輩的經驗

@做設計的面條?塹拔刻︰我最近收到了很多工作1-3年的面粉們發來的求助泉,他們有的將簡歷和作品集發出去後就石沉了大海勁瑰,有的好不容易找到了新工作卻還沒... >>詳情

25
04月
PHP array_shift()用法實例分析

本文實例講述了PHP array_shift()用法復侮睫。分享給大家供大家參考咸,具體如下含奪鈉︰array_shift()將數組開頭的單元移出數組槍,並... >>詳情

07
04月
如何平衡用戶體驗和商業收益?來看高級設計師的

吳軼 犢下逃︰用戶體驗有的時候是和商業化指標KPI 相矛盾的璃,那我們在設計一款產品的時候如何用量化的方式獲得商業化指標和用戶體驗的均衡?最近幾個月... >>詳情

營業執照. cdn加速服務 備案系統認證 網絡安全協會 我們的支付方式AAA認證

7x24小時服務電話:18581389571 傳真:023-85725751 免費建站交流群齡書︰236412099 139947842(自助建站交流) E-Mail:post@yinxi.net 網站投訴:
重慶楚捷科技有限公司 一佰互聯©版權所有 自助建站(www.yinxi.net,Inc.) 2001-2020 All Rights Reserved 本站程序受法律保護,網站法律顧問貢鉛︰ITLAW-莊毅雄律師
中華人民共和國信息產業部網站備案號:渝ICP備12000592號
pk10开奖 热购彩票 热购彩票