「使用多個專門的介面比使用單一的總介面要好」。
「乙個類對另外乙個類的依賴性應該建立在最小的介面上」。
陳述:
例子:
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還要具...