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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件设计原则(五)接口隔离原则 -Interface Segregation Principle

發布時間:2024/1/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件设计原则(五)接口隔离原则 -Interface Segregation Principle 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在講接口隔離原則之前,先明確一下我們的主角——接口。接口分為兩種:

◇ 實例接口(Object Interface),在Java中聲明一個類,然后用new關鍵字產生的一個實例,它是對一個類型的事物的描述,這是一種接口,比如你定義Person這個類,然后使用Person zhangSan = new Person()產生了一個實例,這個實例要遵從的標準就是Person這個類,Person類就是zhangSan的接口,疑惑?看不懂?不要緊,那是因為讓Java語言浸染的時間太長了,只要知道從這個角度來看,Java中的類也是一種接口;?
◇ 類接口(Class Interface),Java中經常使用的interface關鍵字定義的接口。?
??????? 主角已經定義清楚了,那什么是隔離呢?它有兩種定義,如下所示:?
◇ “Clients should not be forced to depend upon interfaces that they don't use”——客戶端不應該依賴它不需用的接口。?
◇ “The dependency of one class to another one should depend on the smallest possible interface”——類間的依賴關系應該建立在最小的接口上。?
??????? 新事物的定義一般都比較難理解,晦澀難懂是正常的。我們把這兩個定義剖析一下,先說第一種定義:“客戶端不應該依賴它不需要接口”,那依賴什么?依賴它需要的接口,客戶端需要什么接口就提供什么接口,把不需要的接口剔除掉,那就需要對接口進行細化,保證其純潔性;再看第二個定義:“類間的依賴關系應該建立在最小的接口上”,它要求是最小的接口,也是要求接口細化,接口純潔,與第一個定義如出一轍,只是一個事物的兩種不同描述。?
?????? 我們可以把這兩個定義概括為一句話:建立單一接口,不要建立臃腫龐大的接口。再通俗一點講:接口盡量細化,同時接口中的方法盡量少。看到這里大家有可能要疑惑了,這與單一職責原則不是相同的嗎?錯,接口隔離原則與單一職責的審視角度是不相同的,單一職責要求的是類和接口職責單一,注重的是職責,這是業務邏輯上的劃分,而接口隔離原則要求接口的方法盡量少。例如一個接口的職責可能包含10個方法,這10個方法都放在一個接口中,并且提供給多個模塊訪問,各個模塊按照規定的權限來訪問,在系統外通過文檔約束“不使用的方法不要訪問”,按照單一職責原則是允許的,按照接口隔離原則是不允許的,因為它要求“盡量使用多個專門的接口”,專門的接口指什么?就是指提供給每個模塊都應該是單一接口,提供給幾個模塊就應該有幾個接口,而不是建立一個龐大的臃腫的接口,容納所有的客戶端訪問。


Interface Segregation Principle:

Clients should not be forced to depend upon interfaces that they don't use.——客戶端只依賴于它所需要的接口;它需要什么接口就提供什么接口,把不需要的接口剔除掉。

The dependency of one class to another one should depend on the smallest possible interface.——類間的依賴關系應建立在最小的接口上。

即,接口盡量細化,接口中的方法盡量少


問題由來:

??????? 類A通過接口I依賴類B,類C通過接口I依賴類D,如果接口I對于類A和類B來說不是最小接口,則類B和類D必須去實現他們不需要的方法。

解決方案:

??????? 將臃腫的接口I拆分為獨立的幾個接口,類A和類C分別與他們需要的接口建立依賴關系。包含4層含義:

??????? 1)接口要盡量小

??????? 不能出現Fat Interface;但是要有限度,首先不能違反單一職責原則(不能一個接口對應半個職責)。

??????? 2)接口要高內聚

??????? 在接口中盡量少公布public方法。

?????? 接口是對外的承諾,承諾越少對系統的開發越有利。

?????? 3)定制服務

?????? 只提供訪問者需要的方法。例如,為管理員提供IComplexSearcher接口,為公網提供ISimpleSearcher接口。

?????? 4)接口的設計是有限度的

建議:

  • 一個接口只服務于一個子模塊或業務邏輯;
  • 通過業務邏輯壓縮接口中的public方法;
  • 已被污染了的接口,盡量去修改;若變更的風險較大,則采用適配器模式轉化處理;
  • 拒絕盲從

與單一職責原則的區別:

??????? 二者審視角度不同;

??????? 單一職責原則要求的是類和接口職責單一,注重的是職責,這是業務邏輯上的劃分;

??????? 接口隔離原則要求接口的方法盡量少。。。


總結

以上是生活随笔為你收集整理的软件设计原则(五)接口隔离原则 -Interface Segregation Principle的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。