接口隔離原則

接口隔離原則

接口隔離原則(Interface Segregation Principle,ISP),是設計模式六大原則之一。客戶端不應該依賴它不需要的接口;一個類對另一個類的依賴應該建立在最小的接口上。

基本信息

簡介

(ISP--Interface segregation Principle)
使用多個專門的接口比使用單一的總接口要好。
一個類對另外一個類的依賴性應當是建立在最小的接口上的。
一個接口代表一個角色,不應當將不同的角色都交給一個接口。沒有關係的接口合併在一起,形成一個臃腫的大接口,這是對角色和接口的污染。
“不應該強迫客戶依賴於它們不用的方法。接口屬於客戶,不屬於它所在的類層次結構。”這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫用戶使用它們不使用的方法,那么這些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。

舉例說明

接口隔離原則
使用場合,提供調用者需要的方法,禁止不需要的方法.滿足接口隔離原則.比如說電子商務的系統,有訂單這個類,有三個地方會使用到,
一個是門戶,只能有查詢方法,
一個是外部系統,有添加訂單的方法,
一個是管理後台,添加刪除修改查詢都要用到.
根據接口隔離原則(ISP),一個類對另外一個類的依賴性應當是建立在最小的接口上.
也就是說,對於門戶,它只能依賴有一個查詢方法的接口.
UML結構如下:
下面是實現的代碼.
//--這兒不用接口繼承,因為可能出現修改了父接口影響了子接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 interface IOrderForPortal{ StringgetOrder(); } interface IOrderForOtherSys{ StringinsertOrder(); StringgetOrder(); } interface IOrderForAdmin{ //extendsIOrderForPortal,IOrderForOtherSys StringdeleteOrder(); StringupdateOrder(); StringinsertOrder(); StringgetOrder(); } /* interfaceIOrderForPortal{ StringgetOrder(); } interfaceIOrderForOtherSys{ StringinsertOrder(); } interfaceIOrderForAdminextendsIOrderForPortal,IOrderForOtherSys{ StringupdateOrder(); StringdeleteOrder(); } */ class Order implements IOrderForPortal,IOrderForOtherSys,IOrderForAdmin{ private Order(){ //--什麼都不乾,就是為了不讓直接new,防止客戶端直接New,然後訪問它不需要的方法. } //返回給Portal public static IOrderForPortalgetOrderForPortal(){ return (IOrderForPortal) new Order(); } //返回給OtherSys public static IOrderForOtherSysgetOrderForOtherSys(){ return (IOrderForOtherSys)newOrder(); } //返回給Admin public static IOrderForAdmingetOrderForAdmin(){ return (IOrderForAdmin) new Order(); } //--下面是接口方法的實現.只是返回了一個String用於演示 public StringgetOrder(){ return "implementedgetOrder" ; } public StringinsertOrder(){ return "implementedinsertOrder" ; } public StringupdateOrder(){ return "implementedupdateOrder" ; } public StringdeleteOrder(){ return "implementeddeleteOrder" ; } } public class TestCreateLimit{ public static void main(String[] args){ IOrderForPortalorderForPortal=Order.getOrderForPortal(); IOrderForOtherSysorderForOtherSys=Order.getOrderForOtherSys(); IOrderForAdminorderForAdmin=Order.getOrderForAdmin(); System.out.println(" Portal門戶調用方法:"+orderForPortal.getOrder()); System.out.println("OtherSys外部 系統調用方法:"+orderForOtherSys.insertOrder()); System.out.println( "Admin管理後台調用方法:" +orderForAdmin.getOrder()+ ";" +orderForAdmin.insertOrder()+ ";" +orderForAdmin.updateOrder()+ ";" +orderForAdmin.deleteOrder()); } }
這樣就能很好的滿足接口隔離原則了,調用者只能訪問它自己的方法,不能訪問到不應該訪問的方法

相關詞條

相關搜尋

熱門詞條

聯絡我們