面向介面程式設計

2021-04-16 09:39:08 字數 1026 閱讀 8238

「面向介面程式設計」,英文的定義是「

program to an inte***ce, not an implementation

」。它是物件導向程式設計裡面的乙個設計原則。所謂原則,就是「你最好按我的樣子來做,實在不行也可以違反」。

物件導向程式設計有三個主要的特性,即是封裝,多型,繼承。面向介面程式設計是多型特性的乙個表現,就是說你的設計遵循了面向介面程式設計的原則,那麼你就具有了物件導向的多型特性,你的設計就更

oo一點。

設計模式解析裡提到了物件導向設計考慮的幾個視角,乙個是概念層,乙個是規約層,乙個是實現層。我如果沒有猜錯的話,實際上我們大多數人的眼睛一直是盯著實現層的,而這正是物件導向設計所極力避免的,即你不要在一開始就關注這些細節,你要關注的是規約(介面).

對於實際專案開發來說,如果我們把實現的過程分為多個階段的話我們不妨這麼劃分,第一階段,根據client端的需要去設計我們的規約(inte***ce),在這個階段任何實現都沒有,所有的任務就是定義介面所需要的職責,以及所需要的一些po,vo;第二階段,實現前面定義的規約。而以前我是怎麼做的呢? 我是交叉作的,即假模假樣的定義乙個介面(其實我心裡在想這個東西有屁用),然後定義了乙個方法,然後就立即去實現這個方法,再然後我又定義乙個方法,繼續去實現,我現在終於想通了,這樣好累,效率很低,最重要的是,這不屬於真正的設計。

現在我是怎麼做的呢?比如乙個list.jsp裡需要查詢,列表,然後看明細資訊,然後增加資訊,我會第一步在介面裡定義完(這個過程會有整體設計的意識),毫不關心底層實現(資料庫、事務),我的目標就是"我想要這個功能,我想要那個功能",至於那個功能怎麼實現在第一階段我認為那不是我的事情(儘管這個事情最終還是由我來做) .大家看這個過程和前面的過程有什麼本質的不同呢? 就是分層的概念更加明顯,你的工作更有層次,每次都有先設計再實現的步驟,而前面那個過程很容易就讓你不知不覺地陷入純實現的陷阱中。

物件導向是指,我們考慮問題時,以物件為單位,考慮它的屬性及方法;

面向過程是指,我們考慮問題時,以乙個具體的流程(事務過程)為單位,考慮它的實現;

介面設計與非介面設計是針對復用技術而言的,與物件導向(過程)不是乙個問題。

面向介面程式設計

物件導向設計裡有一點大家已基本形成共識,就是面向介面程式設計,我想大多數人對這個是沒有什麼覺得需要懷疑的。問題是在實際的專案開發中我們是怎麼體現的呢?難道就是每乙個實現都提供乙個介面就了事了?反過來說,你有時候有沒有覺得介面是多餘的事?又或者,你僅僅是覺得現在類似spring這樣的框架已習慣用介面這...

面向介面程式設計

上篇我們了解了當依賴注入與面向介面程式設計結合起來,才能真正發揮依賴注入的優勢。這篇我們開始簡單了解一下面向介面程式設計。什麼是面向介面程式設計?乙個類依賴其他類的目的是為了獲取其他類所提供的服務,可能這種服務有多種實現,我們可能需要根據不同的場景使用不同的實現。此時,我們可以使用多型,將同一功能的...

面向介面程式設計

1 介面shapearea 介面方法 double getarea 求乙個形狀的面積 double getperimeter 求乙個形狀的周長 2 類circle 實現shapearea介面,並有以下屬性和方法 屬性 radius double型別,表示圓的半徑 方法circle double r ...