Android 簡(jiǎn)單服務(wù)定位器模式實(shí)現(xiàn)
依賴注入(Dependency Injection)和服務(wù)定位器(Service Locator)是實(shí)現(xiàn)控制反轉(zhuǎn)(Inversion of Control)的兩種主要手段。
Android的主流依賴注入框架有:Dagger 和 Kion
這些依賴注入框架都感覺比較重。
服務(wù)定位器比如少見,這里提供一個(gè)一個(gè)簡(jiǎn)單的服務(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 簡(jiǎn)單服務(wù)定位器模式實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Android 簡(jiǎn)單服務(wù)定位器模式的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 詳解Android studio 動(dòng)態(tài)fragment的用法2. 解決Android studio xml界面無(wú)法預(yù)覽問題3. 圖文詳解vue中proto文件的函數(shù)調(diào)用4. Spring Boot和Thymeleaf整合結(jié)合JPA實(shí)現(xiàn)分頁(yè)效果(實(shí)例代碼)5. php模擬實(shí)現(xiàn)斗地主發(fā)牌6. 什么是python的自省7. Vue封裝一個(gè)TodoList的案例與瀏覽器本地緩存的應(yīng)用實(shí)現(xiàn)8. vue 使用localstorage實(shí)現(xiàn)面包屑的操作9. .Net Core使用Coravel實(shí)現(xiàn)任務(wù)調(diào)度的完整步驟10. Vuex localStorage的具體使用

網(wǎng)公網(wǎng)安備