書名: 零基礎學Java項目開發作者名: 聚慕課教育研發中心編著本章字數: 1847字更新時間: 2022-07-28 18:41:30
1.6 接口設計
軟件的未來其實在很大程度上要看軟件接口的前景如何。我們知道,計算機世界里的“接口”一詞具有兩種眾所周知的含義:其一是指軟件本身的狹義“接口”,如各種軟件開發API等;其二則是指人與軟件之間的交互界面。
接口設計一般出現在軟件開發的概要設計階段,概要設計要根據需求劃分模塊,而模塊之間的聯系就是通過定義接口實現的。例如有模塊A和模塊B,兩者互相不知道對方實現的細節,當模塊A要用到模塊B中的功能時,就要使用模塊B提供的外部接口(接口可以理解為一些功能函數的原型,包括函數名、參數列表和返回值);同樣,模塊A內可以定義內部接口,供模塊A內部的函數調用。當各個模塊中的接口完全設計好并通過評審后,各個模塊就可以進行獨立的詳細設計及編碼了。下面將詳細地講解接口設計的六大原則內容。
1.6.1 單一職責原則
單一職責原則(Single Responsibility Principle),簡稱SRP。就一個類而言,應該僅有一個引起它變化的原因。要避免一個類實現多個功能,否則當發生更改時會影響其他功能而致使復用成為不可能。使用的時候應該根據實際業務情況而定。實際使用時,類很難做到職責單一,但是接口的職責應該盡量單一。
1.6.2 依賴倒置原則
依賴倒置原則(Dependence Inversion Principle,DIP)。程序設計應該依賴抽象接口,而不應該依賴具體實現,即為接口編程思想。接口是穩定的,實現是不穩定的,一旦接口確定,就不應該再進行修改了。根據接口的實現,可以根據具體問題和情況,采用不同的手段去實現。
依賴倒置原則的定義需注意以下3點。
(1)高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象。
(2)抽象不應該依賴細節。
(3)細節應該依賴抽象。
依賴的3種寫法如下。
(1)構造函數傳遞依賴對象。
(2)Setter方法傳遞依賴對象。
(3)接口聲明依賴對象。
最佳實踐:
(1)每個類盡量都有接口或抽象類,或者抽象類和接口兩者都具備。
(2)任何類都不應該從具體類派生。
(3)盡量不要覆寫基類的方法。
(4)結合里氏替換原則使用。
(5)變量的表面類型應盡量是接口或抽象類。
1.6.3 迪米特法則
迪米特法則(Law of Demeter,LOD)又稱最少知識原則(Least Knowledge Principle,簡稱LKP)。它表示一個實體應當盡可能少地與其他實體之間發生相互作用。
低耦合要求:
(1)朋友類是一種出現在成員變量、方法的輸入和輸出參數中的類。方法體內部的類不屬于朋友類。
(2)迪米特法則要求類“內斂”一點,盡量不要對外公布太多的public方法和非靜態的public變量,多使用private、protected、package-private等訪問權限。
(3)如果一個方法放在本類中,既不增加類之間的關系,也對本類不產生負面影響,就放置在本類中。
(4)謹慎使用Serializable。
1.6.4 里氏替換原則
里氏替換原則(Liskov Substitution Principle,LSP)。子類對象能夠替換其父類對象被調用,即在程序中,任何調用父類對象實現的功能都可以調用子類對象來替換。
所有引用父類的位置必須能透明地使用其子類的對象,里氏替換原則為確保子類良好地繼承父類定義了以下規范。
(1)子類必須完全實現父類的方法。
(2)子類可以有自己的“個性”(屬性和方法)。
(3)覆寫或實現父類的方法時輸出結果可以被縮小。
(4)覆蓋或實現父類的方法時輸入參數可以被放大。
提示:在類中調用其他類時務必要使用父類或接口,如果不能使用父類或接口,則說明類的設計已經違背了LSP原則。
1.6.5 接口隔離原則
接口,這里是指用interface關鍵字定義的接口,使用多個隔離接口比使用單個接口要好。經常提到的降低耦合、降低依賴主要也是通過接口隔離原則來達到的。
接口隔離原則的定義需注意以下兩點。
(1)客戶端不應該依賴它不需要的接口。
(2)類之間的依賴關系應該建立在最小的接口上。
概括地說,即建立單一接口,不要建立臃腫、龐大的接口。通俗來講,接口盡量細化,同時接口中的方法盡量少。
保障接口的純潔性有以下4點需要注意。
(1)接口要盡量小。
(2)定制服務。
(3)接口要高內聚。
(4)接口的設計是有限度的。
最佳實踐:
(1)一個接口只服務于一個子模塊或業務邏輯。
(2)通過業務邏輯壓縮接口中的public方法,盡量讓接口簡單、代碼不繁雜。
(3)對于已經被污染的接口,應盡量去修改。若變更的風險較大,則采用適配器模式進行轉化處理。
(4)了解環境,拒絕盲從。每個項目或產品都有特定的環境因素,設計時不要盲從或跟從別人的設計,而要根據業務邏輯進行較佳的接口設計。
1.6.6 開閉原則
開閉原則表示的是程序的設計應該不約束擴展(即擴展開放),但又不能修改已有功能(即修改關閉)。
軟件實體包括以下幾個部分。
(1)項目和軟件產品中按照一定的邏輯規則劃分的模塊。
(2)抽象和類。
(3)方法。
變化的3種類型如下。
(1)邏輯變化。
(2)可見視圖變化。
(3)子模塊變化。
- SQL Server 從入門到項目實踐(超值版)
- jQuery Mobile Web Development Essentials(Third Edition)
- The DevOps 2.3 Toolkit
- Apache ZooKeeper Essentials
- Mobile Application Development:JavaScript Frameworks
- C# 2012程序設計實踐教程 (清華電腦學堂)
- Django開發從入門到實踐
- R語言游戲數據分析與挖掘
- PostgreSQL技術內幕:事務處理深度探索
- MariaDB High Performance
- 你必須知道的204個Visual C++開發問題
- The HTML and CSS Workshop
- Creating Mobile Apps with jQuery Mobile(Second Edition)
- Learning Shiny
- Python數據可視化之matplotlib實踐