面向對象系統中,功能由眾多對象協作完成。對象內部實現細節不重要,對象間的協作關係才是設計關鍵。面向介面程式設計 (Program to Interface) 正是基於此思想:定義協作契約 (介面),分離定義與實現,依賴抽象而非具體。
abstract class,提供部分實現與狀態interface,純契約無實現一個類可實作多個介面 (多重抽象面),但只能繼承一個抽象體。
介面不存在於真空中,環境定義了介面的語義與約束。脫離原有環境 (上下文),介面將失去意義。設計介面時必須考慮所處架構層級、業務邊界、技術棧等環境因素。
Component = Contract (介面) + Code (實現) + Context (環境) 三位一體。缺一不可:
| 誤區 | 正確理解 |
|---|---|
| 面向介面 = 面向過程? | 否。面向介面是復用技術層面的設計原則,與面向對象/過程是不同維度 |
| UML interface = Java interface? | UML interface 指系統組件間協作協議,可映射為 Java interface、CORBA IDL、COM interface 等多種技術實現 |
| 只有介面沒實現,或只有實現無介面 | 皆不可行。抽象與具象是矛盾統一體,介面定義契約,實現履行契約 |
面向介面程式設計不是語法技巧,而是架構思維。它要求設計者關注「組件間如何協作」而非「類內部如何實現」,透過契約分離關注點,實現系統的可擴展、可維護、可測試。老老實實面向對象,老老實實面向協議,才是正道。