Android 簡單服務(wù)定位器模式實(shí)現(xiàn)
依賴注入(Dependency Injection)和服務(wù)定位器(Service Locator)是實(shí)現(xiàn)控制反轉(zhuǎn)(Inversion of Control)的兩種主要手段。
Android的主流依賴注入框架有:Dagger 和 Kion
這些依賴注入框架都感覺比較重。
服務(wù)定位器比如少見,這里提供一個(gè)一個(gè)簡單的服務(wù)定位器模式實(shí)現(xiàn)。
引入
項(xiàng)目地址:github.com/czy1121/ser…
repositories { maven { url "https://gitee.com/ezy/repo/raw/android_public/"} } dependencies { implementation "me.reezy.jetpack:servicelocator:0.4.0" }
API
// 獲取實(shí)例 inline fun <reified T> resolve(name: String = T::class.java.name): T? // 注冊(cè)為單例 inline fun <reified T> singleton(name: String = T::class.java.name, crossinline block: () -> T) // 注冊(cè)為工廠 inline fun <reified T> factory(name: String = T::class.java.name, crossinline block: () -> T)
使用
單例,每次resolve獲得的都是同一實(shí)例
class SomeService { fun doSomething() { } } // 注冊(cè) singleton { SomeService() } // 獲取 val service = resolve<SomeService>()
具名單例
class NamedService(val name: String) { fun doSomething() { } } // 注冊(cè) singleton("a") { NamedService("aaa") } singleton("b") { NamedService("bbb") } // 獲取 val serviceA = resolve<NamedService>("a") val serviceB = resolve<NamedService>("b")
工廠,每次resolve都會(huì)產(chǎn)生新實(shí)例
class SomeService { fun doSomething() { } } // 注冊(cè) factory { SomeService() } // 獲取,每次resolve都會(huì)產(chǎn)生新實(shí)例 val service1 = resolve<SomeService>() val service2 = resolve<SomeService>()
具名工廠
class NamedService(val name: String) { fun doSomething() { } } // 注冊(cè) factory("a") { NamedService("aaa") } factory("b") { NamedService("bbb") } // 獲取 // A1 與 A2 是使用同一工廠產(chǎn)生的不同實(shí)例 // A1 與 B1 是使用不同工廠產(chǎn)生的不同實(shí)例 val serviceA1 = resolve<NamedService>("a") val serviceA2 = resolve<NamedService>("a") val serviceB1 = resolve<NamedService>("b") val serviceB2 = resolve<NamedService>("b")
以上就是Android 簡單服務(wù)定位器模式實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Android 簡單服務(wù)定位器模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Android制作一個(gè)錨點(diǎn)定位的ScrollView
- android加密參數(shù)定位實(shí)現(xiàn)方法
- Android Studio使用Profiler來完成內(nèi)存泄漏的定位
- 解決Android原生定位的坑
- Android實(shí)現(xiàn)點(diǎn)擊某個(gè)按鈕指定位置彈出布局
- Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)
- Android 百度地圖定位實(shí)現(xiàn)仿釘釘簽到打卡功能的完整代碼
- android studio 使用Mocklocation虛擬定位
- 解決Android 10/Android Q手機(jī)在后臺(tái)無法正常定位問題
- Android實(shí)現(xiàn)高德地圖顯示及定位
- Android如何實(shí)現(xiàn)模擬定位
相關(guān)文章
Android LaunchMode四種啟動(dòng)模式詳細(xì)介紹
這篇文章主要介紹了Android LaunchMode四種啟動(dòng)模式詳細(xì)介紹的相關(guān)資料,這里對(duì)launchmode的使用方法進(jìn)行了詳解及啟動(dòng)模式的比較,需要的朋友可以參考下2016-12-12Android實(shí)現(xiàn)語音合成與識(shí)別功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)語音合成與識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07Android 通過Intent使用Bundle傳遞對(duì)象詳細(xì)介紹
這篇文章主要介紹了Android 通過Intent使用Bundle傳遞對(duì)象詳細(xì)介紹的相關(guān)資料,并附實(shí)例代碼講解,具有一定的參考價(jià)值,需要的朋友可以參考下2016-11-11Android實(shí)現(xiàn)同頻共幀動(dòng)畫效果
我們聽過“同頻共振”,其原理是多個(gè)物體物體以同樣的頻率振動(dòng),但是本篇實(shí)現(xiàn)的效果是“同頻共幀”,含義是:動(dòng)畫以同樣的頻率和同樣的幀展示在多個(gè)不同View上,文中通過代碼示例介紹的非常詳細(xì),感興趣的同學(xué)可以自己動(dòng)手嘗試一下2024-01-01詳解android特性之CoordinatorLayout用法探析實(shí)例
本篇文章主要介紹了android特性之CoordinatorLayout用法探析實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02Android7.0中關(guān)于ContentProvider組件詳解
本文描述了Android7.0中關(guān)于ContentProvider組件實(shí)現(xiàn)原理以及ContentProvider發(fā)布者和調(diào)用者這兩在Framework層是如何實(shí)現(xiàn)的。2017-11-11