設計模式之接口隔離原則

接口隔離原則,英文縮寫ISP,全稱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。性能

官方翻譯:其一是不該該強行要求客戶端依賴於它們不用的接口;其二是類之間的依賴應該創建在最小的接口上面。簡單點說,客戶端須要什麼功能,就提供什麼接口,對於客戶端不須要的接口不該該強行要求其依賴;類之間的依賴應該創建在最小的接口上面,這裏最小的粒度取決於單一職責原則的劃分。spa

 

在這裏提一下單一職責和接口隔離原則的區別。首先兩個側重點是不同的,單一職責要求類和接口,或者方法的職責單一,側重點在職責,這是根據業務邏輯進行劃分的。翻譯

而接口隔離原則在此前的基礎上接口中的方法儘可能少。好比,一個接口或者一箇中有十個方法,不一樣的方法作不一樣的事情,可是這個接口職責上整體就是處理一件事情,而後具體細分紅了10個方法。不一樣的模塊根據不一樣的權限進行訪問,這是符單一職責原則的。設計

可是按照接口隔離的原則是要求接口接口中的方法儘可能少,落實到這個實例就是要求儘可能多幾個專門的接口供不一樣的模塊使用,而不是隻有一個臃腫的接口,依據權限去限制不一樣模塊能夠訪問的方法。接口

 

舉一個圖書管理系統的例子,有一個查詢接口BookSearch,包括以下方法:searchById,searchByBookName,searchByCategory,complexSearch,其中前三個方法是提供給學生使用的,後一個方法是提供給管理員使用的,學生對這個方法的訪問是有限制的,調用不會返回任何值。當這四個方法所有公佈出去以後,學生對此方法的訪問即便不返回任何值也會使服務器性能降低。ip

所以合理的設計應該是拆分這個接口爲兩個接口:SimpleSearch和AdminSearch。ci

SimpleSearch接口提供searchById,searchByBookName,searchByCategory方法,io

AdminSearch接口提供complexSearch方法,class

此時學生實現SimpleSearch接口便可,管理員同時實現SimpleSearch和AdminSearch兩個接口。

相關文章
相關標籤/搜索