通過面向介面程式設計對控制反轉IOC的理解

2021-10-23 15:43:13 字數 1145 閱讀 4484

ioc,把控制反轉到業務端,這句話沒什麼問題,在springboot框架裡,物件的管理是通過spring ioc來實現的,而開發人員的開發原則裡總是說「面向介面程式設計」,而為什麼要面向介面卻沒幾個人能說出來,今天在寫乙個基於redis的手動分布鎖時,對這個面向介面和控制反轉又有了乙個體會。

當你為開發人員提供乙個封閉的包時,他們是直接用的,他們不會修改你的**,當然他們可以去繼承並擴充套件;當然如果你不希望被繼承可以宣告為final,這都是物件導向程式設計裡提供好的功能,我們主要看控制反轉這句話,它把控制權交給了上層去實現,底層通過 面向介面的原則只設計乙個規範,而又使用者去實現;但框架功能裡的細節是要有的,這類似於「模版方法」模式,底層框架實現了流程,而個性化的部分由上層去實現。

public inte***ce auditoraware
上面這個泛型介面只有乙個方法,需要讓上層開發人員根據自己的業務去實現它,比較返回乙個當前登陸的使用者實體,或者返回使用者名稱,然後底層框架裡直接使用這個auditoraware介面的物件;當然如果你的底層只接收乙個string型別的值,你也可以去派生乙個個性化介面,讓上層開發人員去實現你的介面即可。

/**

* 返回使用者id的標識介面,由程式使用者去實現.

*/public inte***ce useridauditoraware extends auditoraware

上面**更加準確的規定了auditoraware是乙個字串的介面,只返回使用者id即可。

@component

public class currentuseraware implements useridauditoraware

}

我們的底層**會使用它的getcurrentauditor()返回值 ,它是乙個字串。

public object execute(string sourceid, integer timeout, timeunit unit)
對於乙個小小的功能,我們在經過思考之後,對於之前學過的東西進行總結,你可能會想法某種設計模式、某個演算法、某個原則、在使用它們之後,讓你的**擴充套件性更好,這種**也彷彿有了生命!

面向介面程式設計

面向介面程式設計 英文的定義是 program to an inte ce,not an implementation 它是物件導向程式設計裡面的乙個設計原則。所謂原則,就是 你最好按我的樣子來做,實在不行也可以違反 物件導向程式設計有三個主要的特性,即是封裝,多型,繼承。面向介面程式設計是多型特性...

面向介面程式設計

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

面向介面程式設計

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