在我們學習面向對象程式設計的時候,總會出現一些問題,好比以前剛剛寫好的代碼,上線測試可以、正常運作,突然有一天說要加一個功能,改完之後,發現以前正常運作的功能不能用了,類似這樣的問題有好多好多,為了避免類似的事件發生,程式員一定要根據這些原則去開發程式。
我們一個一個來學習,今天來學習7大面向對象設計原則之一,迪米特法則。
迪米特法則:
迪米特法則(Law of Demeter,LoD)又叫作最少知識原則(Least Knowledge Principle,LKP),産生于 1987 年美國東北大學(Northeastern University)的一個名為迪米特(Demeter)的研究項目,由伊恩·荷蘭(Ian Holland)提出,被 UML 創始者之一的布奇(Booch)普及,後來又因為在經典著作《程式員修煉之道》(The Pragmatic Programmer)提及而廣為人知。
迪米特法則的定義是:隻與你的直接朋友交談,不跟“陌生人”說話(Talk only to your immediate friends and not to strangers)。
其含義是:如果兩個軟體實體無須直接通信,那麼就不應當發生直接的互相調用,可以通過第三方轉發該調用。其目的是降低類之間的耦合度,提高子產品的相對獨立性。
這個我們這樣去了解,就說錢這個東西吧,就我們平時用的支付寶啊,微信啊,我們在付款的時候,不需要再帶上一大堆的銀行卡啊,網銀啊這些了,我們可以直接通過支付寶、微信這些,直接從銀行卡中把錢拿出來,然後支付。這裡呢,就是用的迪米特法則。
我們原本和銀行打交道,存錢取錢,但是銀行又多,我們不能把所有的卡都帶上,是以呢,微信支付幫我們把這些都弄到一起,然後我們選擇用那個銀行卡中的錢支付就好了。
迪米特法則的優點:
降低了類之間的耦合度,提高了子產品的相對獨立性。
由于親合度降低,進而提高了類的可複用率和系統的擴充性。
迪米特法則的實作:
其實實作我已經說了,就是上面的銀行卡的問題。
人呢,有很多銀行卡,好比我來說,我有建行卡,農行卡,北京銀行卡三個卡,以前出門購買點大件,都得需要帶上。
現在呢,我拿上手機就好了,卡仍在家裡就行。因為微信支付幫我解決了統一化管理的這個問題。
我呢,隻需要知道微信支付的密碼,拿好手機就行。微信支付呢,需要和我的那些個銀行卡綁定,就好。
我就省的和我的每一張銀行卡做溝通。
迪米特法則我們這裡就說到這裡,大家要好好學習。