乙個類對另乙個類的依賴應該建立在最小的介面上,如果建立在不是最小的介面上,則要實現不需要的方法違背介面隔離原則。
場景:inte***ce1是乙個介面,有五個方法,c和d分別實現了inte***ce1介面,a通過inte***ce1對c產生依賴,但只需要用到function1,function2,function3三個方法,b通過inte***ce1對c產生依賴,但只需要用到function1,function4,function5三個方法
傳統解決方法:
只有乙個介面,類圖如下:
**實現:
package com.ldx.segera;
public
class
segeration
}inte***ce
inte***ce1
class
cimplements
inte***ce1
@override
public
void
function2()
@override
public
void
function3()
@override
public
void
function4()
@override
public
void
function5()
}class
dimplements
inte***ce1
@override
public
void
function2()
@override
public
void
function3()
@override
public
void
function4()
@override
public
void
function5()
}class
apublic
void
function2
(inte***ce1 i)
public
void
function3
(inte***ce1 i)
}class
bpublic
void
function4
(inte***ce1 i)
public
void
function5
(inte***ce1 i)
}
執行結果:
執行結果是沒有問題的,也解決了場景需求,但是類c和d卻實現了不需要的其他兩個方法。這就相對於乙個工廠個人,他本來只需要負責搬貨,但是你還要強制他去當客服,這顯然是不合理的。
解決方法:介面隔離
將inte***ce1分解成三個介面inte***ce1(負責function1),inte***ce2(負責function2,function3),inte***ce3(負責function4,function5),c分別實現了inte***ce1和inte***ce2,d分別實現了inte***ce1和inte***ce3,a通過對inte***ce1和inte***ce2的依賴對c產生依賴,b通過對inte***ce1和inte***ce3的依賴對d產生依賴,類圖如下:
**實現:
package com.ldx.segera.com.ldx.segeration;
public
class
segeration
}inte***ce
inte***ce1
inte***ce
inte***ce2
inte***ce
inte***ce3
class
cimplements
inte***ce1
, inte***ce2
@override
public
void
function2()
@override
public
void
function3()
}class
dimplements
inte***ce1
, inte***ce3
@override
public
void
function4()
@override
public
void
function5()
}class
apublic
void
function2
(inte***ce2 i)
public
void
function3
(inte***ce2 i)
}class
bpublic
void
function4
(inte***ce3 i)
public
void
function5
(inte***ce3 i)
}
執行結果:
小結
介面隔離原則要求乙個類對另乙個類的依賴要建立在最小介面上,否則會承擔不需要的職責。
七大設計原則彙總:七大設計原則彙總
設計模式七大原則之介面隔離原則
基本介紹 客戶端不應該依賴它不需要的介面,即乙個類對另乙個類的依賴應該建立在最小的介面上 先看一張圖 類a通過介面inte ce1依賴類b,類c通過介面inte ce1依賴類d,如果介面inte ce1對於類a和類c來說不是最小介面,那麼類b和類d必須去實現他們不需要的方法。按隔離原則應當這樣處理 ...
設計模式七大原則之介面隔離原則(ISP)
介面隔離原則基本介紹 不應該依賴不需要的介面,即乙個類對另乙個類的依賴應該建立在最小的介面上。場景 1.類b實現介面inte ce1 類a通過介面inte ce1依賴 使 用 類b,但是只會用到1,2,3方法 2.類d實現介面inte ce1 類c通過介面inte ce1依賴 使 用 類d,但是只會...
02 設計模式七大原則 介面隔離原則
客戶端不應該依賴他不需要的介面,即乙個類對另乙個類的依賴應該建立在最小的介面上 package study.wyy.design.principle.segregation author by wyaoyao description date 2020 10 13 8 30 下午 public cl...