軟體設計原則 介面隔離原則(ISP)

2021-06-01 05:43:28 字數 1361 閱讀 3614

「使用多個專門的介面比使用單一的總介面要好」。

「乙個類對另外乙個類的依賴性應該建立在最小的介面上」。

陳述:

例子:

door可以加鎖、解鎖、而且可以感知自己是開還是關;

door是抽象基類,客戶程式可以依賴於抽象而不是具體的實現。

class door;
現在我們要增加乙個功能:如果門開啟時間過長,它就會報警(比如賓館客房的門)。

設計:為了實現上述新增功能,我們要求door與乙個已有的timer物件進行互動。

class timer;

class timerclient;

問題出來了:我們如何將timerclient和timeddoor聯絡起來?

一種常見的解決方案如下:

這種解決方法的問題——

介面汙染

在door介面中加入新的方法(timeout),而這個方法僅僅只為它的乙個子類帶來好處。——如果每次子類需要乙個新方法時它都被加到基類介面中,基類介面將很快變胖。

胖介面將導致srp,lsp被違反,從而導致脆弱、僵化。

解決:

我們使用委託的方式來解決,見下圖所示:

class timeddoor:public door;

class doortimeadapter:public timerclient

vitual void timeout(int timeoutid)

};

解決(續):另一種解決辦法是使用多繼承:

class timeddoor:public door, public timerclient;
注意:多重繼承的方法,要慎用!在effective c++中,已經提到了這點。

總結:相應設計模式

memento

iterator

參考資源:

《設計模式:可復用物件導向軟體的基礎》,erich gamma richard helm ralph johnson john vlissides著作,李英軍 馬曉星 蔡敏 劉建中譯,機械工業出版社,2005.6

《敏捷軟體開發:原則、模式與實踐》,robert c. martin著,鄧輝譯,清華大學出版社,2003.9

《設計模式解析》,alan shalloway等著(徐言聲譯),人民郵電出版社,2006.10

設計原則之介面隔離原則(ISP)

只提供呼叫者需要的方法,遮蔽不需要的方法 電子商務系統,該系統中有訂單這個類,並在三個地方使用到訂單類 針對這三種不同的應用場景,為了滿足介面隔離原則,應使用是三個不同的介面進行隔離,每個介面中提供的方法不同,這樣使每個應用都建立在最小介面上 使用者門戶應用介面 public inte ce ior...

介面隔離原則 ISP

一 isp簡介 isp inte ce segregation principle 使用多個專門的介面比使用單一的總介面要好。乙個類對另外乙個類的依賴性應當是建立在最小的介面上的。乙個介面代表乙個角色,不應當將不同的角色都交給乙個介面。沒有關係的介面合併在一起,形成乙個臃腫的大介面,這是對角色和介面...

ISP介面隔離原則

1.isp介面隔離原則 乙個類對另外乙個類的依賴性應當是建立在最小的介面上的。乙個介面代表乙個角色,不應當將不同的角色都交給乙個介面。沒有關係的介面合併在一起,形成乙個臃腫的大介面,這是對角色和介面的汙染。示例 abstract class door inte ce door 現在要求door還要具...