官术网_书友最值得收藏!

4.1 接口隔離原則的定義

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

?實例接口(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個方法都放在一個接口中,并且提供給多個模塊訪問,各個模塊按照規定的權限來訪問,在系統外通過文檔約束“不使用的方法不要訪問”,按照單一職責原則是允許的,按照接口隔離原則是不允許的,因為它要求“盡量使用多個專門的接口”。專門的接口指什么?就是指提供給每個模塊的都應該是單一接口,提供給幾個模塊就應該有幾個接口,而不是建立一個龐大的臃腫的接口,容納所有的客戶端訪問。

主站蜘蛛池模板: 万年县| 广饶县| 丰县| 桐乡市| 平顶山市| 宝兴县| 威海市| 汝城县| 翁牛特旗| 寿光市| 阜阳市| 富民县| 宽城| 新竹市| 临桂县| 观塘区| 永嘉县| 合山市| 错那县| 县级市| 绥芬河市| 正阳县| 富阳市| 徐州市| 喜德县| 胶州市| 鹰潭市| 绍兴市| 怀远县| 福建省| 三门县| 曲阳县| 莱芜市| 凤庆县| 五莲县| 绍兴市| 同心县| 宁津县| 建昌县| 孙吴县| 仁寿县|