婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP面向對象五大原則之接口隔離原則(ISP)詳解

PHP面向對象五大原則之接口隔離原則(ISP)詳解

熱門標簽:地圖標注專員怎么樣 電話機器人銷售主要負責什么 遼寧ai電銷機器人價格 上海做外呼線路的通信公司 寧波外呼營銷系統 福建銀行智能外呼系統價格 長沙做地圖標注公司 四川保險智能外呼系統供應商 房產中介用的是什么外呼系統

本文實例講述了PHP面向對象五大原則之接口隔離原則(ISP)。分享給大家供大家參考,具體如下:

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

1.接口隔離

接口隔離原則(Interface Segregation Principle, ISP)表明客戶端不應該被強迫實現一些他們不會使用的接口,應該把胖接口中的方法分組,然后用多個接口替代它,每個接口服務于一個子模塊。簡單地說,就是使用多個專門的接口比使用單個接口要好很多。

ISP的主要觀點如下:

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

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

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

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

客戶端程序就應該依賴于它不需要的接口方法(功能),那依賴于什么?依賴它所需要的接口。客戶端需要什么接口就是提供什么接口,把不需要的接口剔除,這就要求對接口進行細化,保證其純潔性。

比如在繼承時,由于子類將繼承父類中的所有可用方法;而父類中的某些方法,在子類中可能并不需要。例如,普通員工和經理都繼承自雇員這個接口,員工需要每天寫工作日志,而經理不需要。因此不能用工作日志來卡經理,也就是經理不應該依賴于提交工作日志這個方法。

可以看出,ISP和SRP在概念上是有一定交叉的。事實上,很多設計模式在概念上都有交叉,甚至你很難判斷一段代碼屬于哪一種設計模式。

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

2.對接口的污染

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

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

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

在實際應用中,會遇到如下問題:比如,我需要一個能適配多種類型數據庫的DAO實現,那么首先應實現一個數據庫操作的接口,其中規定一些數據庫操作的基本方法,比如連接數據庫、增刪改查、關閉數據庫等。這是一個最少功能的接口。對于一些MySQL中特有的而其他數據庫里并不存在的或性質不同的方法,如PHP里可能用到的MySQL的pconnect方法,其他數據庫里并不存在和這個方法相同的概念,這個方法也就不應該出現在這個基本的接口里,那這個基本的接口應該有哪些基本的方法呢?PDO已經告訴你了。

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

還有一個問題,那些特有的方法應該怎么實現?根據ISP原則,這些方法可以在別一個接口中存在,讓這個“異類”同時實現這兩個接口。

對于接口的污染,可以考慮這兩條處理方式:

利用委托分離接口。

利用多繼承分離接口。

委托模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委托給另一個對象來處理,如策略模式、代理模式等中都應用到了委托的概念。

再來看一下實例說明

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

舉個例子來說吧:有一個跟動物有關的接口,代碼如下:

?php
interface Animal{
  public function walk();
  public function speak();
}

狗是這個接口的一個具體實現:

?php
require_once "animal.php";
class Dog implements Animal{
  public function walk(){
    echo "dogs can walk";
  }
  public function speak(){
    echo "dogs can speak";
  }
}

ok,現在我們想創建一個魚類,它會游泳,怎么辦呢?我們必須要修改接口,還會影響到dog類的實現,而fish也需要實現walk和speak方法,如下代碼所示:

Animal接口類:

?php
interface Animal{
  public function walk();
  public function speak();
  public function swim();
}

dog類:

?php
require_once "animal.php";
class Dog implements Animal{
  public function walk(){
    echo "dogs can walk";
  }
  public function speak(){
    echo "dogs can speak";
  }
  public function swim(){
  }
}

fish類:

?php
require_once "animal.php";
class Fish implements Animal{
  public function walk(){
  }
  public function speak(){
  }
  public function swim(){
    echo "fish can swim";
  }
}

這時Animal接口類就呈現出了”胖“接口的特征了。所謂胖接口其實就是接口中定義了不是所有實現類都需要的方法,就像Animal接口類,有些動物是不會游泳的,有些動物是不會行走的,還有些動物是不會飛的。如果將這些方法都寫在一個Animal接口類中,那么后期的擴展和維護簡直就是一場災難。

那么,怎么解決以上問題呢?

很簡單,接口細化即可,將Animal接口類拆分成三個接口類:

animalCanWalk接口類:

?php
interface animalCanSpeak{
  public function speak();
}

AnimalCanSwim接口類:

?php
interface AnimalCanSwim{
  public function swim();
}

animalCanSpeak接口類:

?php
interface animalCanSpeak{
  public function speak();
}

定義好這幾個接口類之后,dog和fish的實現就容易多了,

?php
require_once "animalCanSpeak.php";
require_once "animalCanWalk.php";
class Dog implements animalCanSpeak,animalCanWalk{
  public function walk(){
    echo "dogs can walk";
  }
  public function speak(){
    echo "dogs can speak";
  }
}

?php
require_once "animalCanSwim.php";
class Fish implements AnimalCanSwim{
  public function swim(){
    echo "fish can swim";
  }
}

總結一下:

接口隔離原則(Interface  Segregation Principle, ISP)的概念:使用多個專門的接口,而不使用單一的總接口,即客戶端不應該依賴那些它不需要的接口。

在使用接口隔離原則時,我們需要注意控制接口的粒度,接口不能太小,如果太小會導致系統中接口泛濫,不利于維護;接口也不能太大,太大的接口將違背接口隔離原則,靈活性較差,使用起來很不方便。一般而言,接口中僅包含為某一類用戶定制的方法即可,不應該強迫客戶依賴于那些它們不用的方法。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

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

您可能感興趣的文章:
  • PHP學習記錄之面向對象(Object-oriented programming,OOP)基礎【接口、抽象類、靜態方法等】
  • PHP面向對象程序設計之接口的繼承定義與用法詳解
  • PHP面向對象程序設計高級特性詳解(接口,繼承,抽象類,析構,克隆等)
  • PHP入門教程之面向對象的特性分析(繼承,多態,接口,抽象類,抽象方法等)
  • PHP面向對象程序設計之接口用法
  • PHP 面向對象程序設計(oop)學習筆記(一) - 抽象類、對象接口、instanceof 和契約式編程
  • PHP面向對象的進階學習(抽像類、接口、final、類常量)
  • php學習筆記 面向對象中[接口]與[多態性]的應用
  • PHP 的ArrayAccess接口 像數組一樣來訪問你的PHP對象
  • php面向對象全攻略 (十四) php5接口技術
  • PHP 對象接口簡單實現方法示例

標簽:澳門 深圳 宜春 常德 宿遷 延安 工商登記 佛山

巨人網絡通訊聲明:本文標題《PHP面向對象五大原則之接口隔離原則(ISP)詳解》,本文關鍵詞  PHP,面向,對象,五大,原則,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP面向對象五大原則之接口隔離原則(ISP)詳解》相關的同類信息!
  • 本頁收集關于PHP面向對象五大原則之接口隔離原則(ISP)詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人福利视频网站| 亚洲午夜精品一区二区三区他趣| 欧美激情一区二区三区不卡 | 国产精品久久一卡二卡| 亚洲欧美偷拍三级| 麻豆高清免费国产一区| 国产精品亚洲人在线观看| 欧美日韩国产一级| 欧美国产日韩亚洲一区| 亚洲日本在线视频观看| 99视频有精品| 亚洲国产精品高清| 粉嫩13p一区二区三区| 国产精品国模大尺度视频| 日韩激情在线观看| 国产精品88888| 成人激情午夜影院| 在线影视一区二区三区| 亚洲一区二区三区美女| 色婷婷精品大在线视频| 精品欧美久久久| 在线观看免费视频综合| 97精品久久久午夜一区二区三区 | 色综合天天综合色综合av| 99精品国产一区二区三区不卡| 国产一区二区三区四区五区入口| 久久精品国产99久久6| 在线观看中文字幕不卡| 国产精品久久久久久久久免费桃花| a美女胸又www黄视频久久| 欧美高清视频不卡网| 天天爽夜夜爽夜夜爽精品视频| 色94色欧美sute亚洲线路二| 国产婷婷色一区二区三区四区| 日韩一区在线播放| 国产1区2区3区精品美女| 欧美mv日韩mv国产| 日本欧美一区二区三区| 91网站最新地址| 久久久五月婷婷| 国产成人综合网| 亚洲成人第一页| 不卡在线视频中文字幕| 中文字幕不卡在线观看| 国产99久久久精品| 国产精品久久三区| 欧美性色欧美a在线播放| 欧美日韩精品高清| 麻豆精品久久久| 欧美福利电影网| 亚洲国产精品欧美一二99| 欧美精品1区2区| 6080国产精品一区二区| 一区二区三区在线高清| 91精品国产综合久久蜜臀| 色呦呦网站一区| 亚洲精品菠萝久久久久久久| 3751色影院一区二区三区| 亚洲电影一区二区| 日韩一区在线播放| 亚洲综合精品自拍| 欧美另类一区二区三区| 国产拍欧美日韩视频二区| 国产在线观看免费一区| 精品国产亚洲在线| 麻豆视频观看网址久久| 久久99久久99| 欧美久久高跟鞋激| eeuss国产一区二区三区| 亚洲激情欧美激情| 亚洲午夜久久久久久久久电影网| 欧美一区二区在线不卡| 亚洲视频免费在线观看| 91精品欧美久久久久久动漫 | 国产精品一区专区| 亚洲色图丝袜美腿| 自拍偷拍亚洲欧美日韩| 在线精品视频一区二区| 欧美视频一区在线| fc2成人免费人成在线观看播放| 亚洲欧美日韩在线播放| 亚洲精品免费电影| 精品国产一区二区三区久久久蜜月 | 日韩一区二区三区四区| 国产精品你懂的| 亚洲综合视频网| 国产欧美一区二区在线| 日韩精品中文字幕在线一区| 国产精品乱人伦中文| 国产精品久久久久久一区二区三区| 91精品欧美一区二区三区综合在| 欧美一区二区性放荡片| 色天天综合色天天久久| 欧美精品日日鲁夜夜添| 国产成人精品三级| 欧美va亚洲va国产综合| 国产精品无遮挡| 日韩色视频在线观看| 亚洲国产成人午夜在线一区| 6080午夜不卡| 国产精品乱码久久久久久| 精品播放一区二区| 91视频精品在这里| 精品国产一区二区三区久久影院 | 成人动漫在线一区| 中文字幕精品三区| 一区二区三区在线视频免费| 暴力调教一区二区三区| 日日夜夜精品视频天天综合网| 91老师片黄在线观看| 老司机精品视频在线| 欧美日本国产一区| 国产真实乱偷精品视频免| 久久综合九色综合久久久精品综合| 粉嫩欧美一区二区三区高清影视| 久久久99精品久久| 欧美怡红院视频| 亚洲1区2区3区4区| 综合婷婷亚洲小说| 成人综合婷婷国产精品久久蜜臀 | 91一区二区三区在线观看| 成人动漫一区二区三区| 亚洲一区二区av电影| 国产专区综合网| 亚洲成人av一区二区| 国产成人av一区二区三区在线| 亚洲国产欧美在线| 99精品视频在线观看| 激情欧美一区二区三区在线观看| 色天使久久综合网天天| 国产精品一二二区| 精品污污网站免费看| 91色porny在线视频| 国产无一区二区| 91麻豆swag| 91精品国产综合久久久久久| 91视视频在线直接观看在线看网页在线看| 亚洲码国产岛国毛片在线| 久久精品视频在线免费观看| 成人福利电影精品一区二区在线观看| 日韩一级二级三级| 国产成人免费xxxxxxxx| 久久精品国产精品亚洲精品| 欧美电影免费观看高清完整版在 | 日韩av电影免费观看高清完整版在线观看| 中文子幕无线码一区tr| 欧美电影精品一区二区 | 国产精品三级av在线播放| av高清不卡在线| 国产在线日韩欧美| 免费观看在线综合| 日韩美女一区二区三区| 欧美日韩国产首页| 一区二区三区波多野结衣在线观看| 国产精品乱码一区二区三区软件| 国产乱人伦偷精品视频免下载| 国产精品久久久久久久久免费樱桃 | 成人午夜大片免费观看| 在线亚洲人成电影网站色www| 国产一区二区导航在线播放| 中文成人综合网| 中文字幕中文字幕在线一区| 不卡av在线免费观看| av网站一区二区三区| 中文字幕字幕中文在线中不卡视频| 中文字幕不卡的av| 欧美日韩一本到| 国产一级精品在线| 国产成人在线观看免费网站| 一个色综合av| 免费在线观看精品| 一级日本不卡的影视| 肉肉av福利一精品导航| 国产精品传媒视频| 亚洲欧洲韩国日本视频| 欧美精品一区二区三区蜜桃视频| 欧美激情一二三区| 日韩丝袜情趣美女图片| 国产欧美日韩精品a在线观看| 欧美精品在线观看播放| 欧美日韩国产系列| 粉嫩av亚洲一区二区图片| 色综合久久天天| 亚洲激情在线播放| 久久精品国产久精国产| 成人小视频免费在线观看| 亚洲制服欧美中文字幕中文字幕| 五月天一区二区| 日韩成人免费看| 一区二区三区四区激情| 国产精品情趣视频| 国产精品嫩草99a| 欧美日韩在线精品一区二区三区激情| 91国偷自产一区二区开放时间 | 国产精品久久久久久久久免费樱桃| 亚洲一区二区欧美日韩| 亚洲综合在线观看视频| 国内精品免费在线观看| 激情欧美一区二区三区在线观看| 不卡的电影网站|