程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java的設計形式編程中迪米特軌則的運用示例

Java的設計形式編程中迪米特軌則的運用示例

編輯:關於JAVA

Java的設計形式編程中迪米特軌則的運用示例。本站提示廣大學習愛好者:(Java的設計形式編程中迪米特軌則的運用示例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java的設計形式編程中迪米特軌則的運用示例正文


界說:一個對象應當對其他對象懂得起碼

迪米特軌則的焦點不雅念就是類間解耦,弱耦合,只要弱耦合了今後,類的復用性才可以進步。

抽象一點的比方相似於:牢獄內的罪人是不該該跟裡面的人接觸的,固然也許會有投親的。這裡的牢獄就是類,外面的罪人就是類外部的信息,而牢獄裡的獄警就相當於迪米特軌則的履行者

迪米特軌則主意:
(1)在類的劃分上,應當創立有弱耦合的類;

(2)在類的構造設計上,每個類都應該盡可能下降成員的拜訪權限;

(3)在類的設計上,只需有能夠,一個類應該設計成不變類;

(4)在對其他類的援用上,一個對象對其它對象的援用應該降到最低;

(5)盡可能下降類的拜訪權限;

(6)謹嚴應用序列化功效;

(7)不要裸露類成員,而應當供給響應的拜訪器(屬性)。

舉一個例子:有一個團體公司,部屬單元有分公司和直屬部分,如今請求打印出一切部屬單元的員工ID。先來看一下違背迪米特軌則的設計。

//總公司員工 
class Employee{ 
  private String id; 
  public void setId(String id){ 
    this.id = id; 
  } 
  public String getId(){ 
    return id; 
  } 
} 
 
//分公司員工 
class SubEmployee{ 
  private String id; 
  public void setId(String id){ 
    this.id = id; 
  } 
  public String getId(){ 
    return id; 
  } 
} 
 
class SubCompanyManager{ 
  public List<SubEmployee> getAllEmployee(){ 
    List<SubEmployee> list = new ArrayList<SubEmployee>(); 
    for(int i=0; i<100; i++){ 
      SubEmployee emp = new SubEmployee(); 
      //為分公司人員按次序分派一個ID 
      emp.setId("分公司"+i); 
      list.add(emp); 
    } 
    return list; 
  } 
} 
 
class CompanyManager{ 
 
  public List<Employee> getAllEmployee(){ 
    List<Employee> list = new ArrayList<Employee>(); 
    for(int i=0; i<30; i++){ 
      Employee emp = new Employee(); 
      //為總公司人員按次序分派一個ID 
      emp.setId("總公司"+i); 
      list.add(emp); 
    } 
    return list; 
  } 
   
  public void printAllEmployee(SubCompanyManager sub){ 
    List<SubEmployee> list1 = sub.getAllEmployee(); 
    for(SubEmployee e:list1){ 
      System.out.println(e.getId()); 
    } 
 
    List<Employee> list2 = this.getAllEmployee(); 
    for(Employee e:list2){ 
      System.out.println(e.getId()); 
    } 
  } 
} 
 
public class Client{ 
  public static void main(String[] args){ 
    CompanyManager e = new CompanyManager(); 
    e.printAllEmployee(new SubCompanyManager()); 
  } 
} 

        如今這個設計的重要成績出在CompanyManager中,依據迪米特軌則,只與直接的同伙產生通訊,而SubEmployee類其實不是CompanyManager類的直接同伙(以部分變量湧現的耦合不屬於直接同伙),從邏輯上講總公司只與他的分公司耦合就好了,與分公司的員工並沒有任何接洽,如許設計明顯是增長了不用要的耦合。依照迪米特軌則,應當防止類中湧現如許非直接同伙關系的耦合。修正後的代碼以下:

class SubCompanyManager{ 
  public List<SubEmployee> getAllEmployee(){ 
    List<SubEmployee> list = new ArrayList<SubEmployee>(); 
    for(int i=0; i<100; i++){ 
      SubEmployee emp = new SubEmployee(); 
      //為分公司人員按次序分派一個ID 
      emp.setId("分公司"+i); 
      list.add(emp); 
    } 
    return list; 
  } 
  public void printEmployee(){ 
    List<SubEmployee> list = this.getAllEmployee(); 
    for(SubEmployee e:list){ 
      System.out.println(e.getId()); 
    } 
  } 
} 
 
class CompanyManager{ 
  public List<Employee> getAllEmployee(){ 
    List<Employee> list = new ArrayList<Employee>(); 
    for(int i=0; i<30; i++){ 
      Employee emp = new Employee(); 
      //為總公司人員按次序分派一個ID 
      emp.setId("總公司"+i); 
      list.add(emp); 
    } 
    return list; 
  } 
   
  public void printAllEmployee(SubCompanyManager sub){ 
    sub.printEmployee(); 
    List<Employee> list2 = this.getAllEmployee(); 
    for(Employee e:list2){ 
      System.out.println(e.getId()); 
    } 
  } 
} 

        修正後,為分公司增長了打印人員ID的辦法,總公司直接挪用來打印,從而防止了與分公司的員工產生耦合。
        迪米特軌則的初志是下降類之間的耦合,因為每一個類都削減了不用要的依附,是以切實其實可以下降耦合關系。然則凡事都有度,固然可以免與非直接的類通訊,然則要通訊,必定會經由過程一個“中介”來產生接洽,例如本例中,總公司就是經由過程分公司這個“中介”來與分公司的員工產生接洽的。過火的應用迪米特准繩,會發生年夜量如許的中介和傳遞類,招致體系龐雜度變年夜。所以在采取迪米特軌則時要重復衡量,既做到構造清楚,又要高內聚低耦合。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved