国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ISP--InterfaceSegregationPrinciple

2019-11-14 15:01:18
字體:
來源:轉載
供稿:網友

一、ISP簡介(ISP--Interface Segregation PRinciple):

 

  使用多個專門的接口比使用單一的總接口要好。

 

  一個類對另外一個類的依賴性應當是建立在最小的接口上的。

 

  一個接口代表一個角色,不應當將不同的角色都交給一個接口。沒有關系的接口合并在一起,形成一個臃腫的大接口,這是對角色和接口的污染。

 

  “不應該強迫客戶依賴于它們不用的方法。接口屬于客戶,不屬于它所在的類層次結構。”這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫用戶使用它們不使用的方法,那么這些客戶就會面臨由于這些不使用的方法的改變所帶來的改變。

 

  二、舉例說明:

 

  使用場合,提供調用者需要的方法,屏蔽不需要的方法.滿足接口隔離原則.比如說電子商務的系統,有訂單這個類,有三個地方會使用到,

 

  一個是門戶,只能有查詢方法,

 

  一個是外部系統,有添加訂單的方法,

 

  一個是管理后臺,添加刪除修改查詢都要用到.

 

  根據接口隔離原則(ISP),一個類對另外一個類的依賴性應當是建立在最小的接口上.

 

  也就是說,對于門戶,它只能依賴有一個查詢方法的接口.

下面是實現的代碼.

 

  //--這兒不用接口繼承,因為可能出現修改了父接口影響了子接口

 

  interface IOrderForPortal{

  String getOrder();

  }

  interface IOrderForOtherSys{

  String insertOrder();

  String getOrder();

  }

  interface IOrderForAdmin{ //extendsIOrderForPortal,IOrderForOtherSys

  String deleteOrder();

  String updateOrder();

  String insertOrder();

  String getOrder();

  }

  /*

  interface IOrderForPortal{

  String getOrder();

  }

  interface IOrderForOtherSys{

  String insertOrder();

  }

  interface IOrderForAdmin extendsIOrderForPortal,IOrderForOtherSys{

  String updateOrder();

  String deleteOrder();

  }

  */

  class Order implementsIOrderForPortal,IOrderForOtherSys,IOrderForAdmin{

  private Order(){

  //--什么都不干,就是為了不讓直接 new,防止客戶端直接New,然后訪問它不需要的方法.

  }

  //返回給Portal

 static IOrderForPortal getOrderForPortal(){

  return (IOrderForPortal)new Order();

  }

  //返回給OtherSys

  public static IOrderForOtherSys getOrderForOtherSys(){

  return (IOrderForOtherSys)neWorder();

  }

  //返回給Admin

  public static IOrderForAdmin getOrderForAdmin(){

  return (IOrderForAdmin)new Order();

  }

  //--下面是接口方法的實現.只是返回了一個String用于演示

  public String getOrder(){

  return "implemented getOrder";

  }

  public String insertOrder(){

  return implementedinsertOrder";

  }

  public String updateOrder(){

  return "implementedupdateOrder";

  }

  public String deleteOrder(){

  return "implementeddeleteOrder";

  }

  }

  public clss TestCreateLimit{

  public static void main(String[] args){

  IOrderForPortal orderForPortal =Order.getOrderForPortal();

  IOrderForOtherSys orderForOtherSys =Order.getOrderForOtherSys();

  IOrderForAdmin orderForAdmin = 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());

  }

  }

  這樣就能很好的滿足接口隔離原則了,調用者只能訪問它自己的方法,不能訪問到不應該訪問的方法.

  歡迎討論...寫這些的目的就是為了共同進步,有什么錯誤或者不足,歡迎指出....


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正镶白旗| 司法| 昌黎县| 乌苏市| 潞西市| 阳新县| 盘山县| 蒲江县| 崇义县| 巴林右旗| 同江市| 绩溪县| 浦县| 柳河县| 南乐县| 黄龙县| 修文县| 崇信县| 汉川市| 进贤县| 广安市| 含山县| 华池县| 金堂县| 治多县| 开鲁县| 新干县| 广丰县| 乡城县| 本溪| 文化| 来安县| 潜山县| 娱乐| 永川市| 广东省| 东丰县| 县级市| 竹溪县| 黎平县| 博湖县|