国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

Android 簡單服務定位器模式實現

瀏覽:3日期:2022-09-20 10:22:10

依賴注入(Dependency Injection)和服務定位器(Service Locator)是實現控制反轉(Inversion of Control)的兩種主要手段。

Android的主流依賴注入框架有:Dagger 和 Kion

這些依賴注入框架都感覺比較重。

服務定位器比如少見,這里提供一個一個簡單的服務定位器模式實現。

引入

項目地址: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

// 獲取實例inline fun <reified T> resolve(name: String = T::class.java.name): T?// 注冊為單例inline fun <reified T> singleton(name: String = T::class.java.name, crossinline block: () -> T)// 注冊為工廠inline fun <reified T> factory(name: String = T::class.java.name, crossinline block: () -> T)使用

單例,每次resolve獲得的都是同一實例

class SomeService { fun doSomething() { }}// 注冊 singleton { SomeService()}// 獲取val service = resolve<SomeService>()

具名單例

class NamedService(val name: String) { fun doSomething() { }}// 注冊 singleton('a') { NamedService('aaa')}singleton('b') { NamedService('bbb')}// 獲取 val serviceA = resolve<NamedService>('a')val serviceB = resolve<NamedService>('b')

工廠,每次resolve都會產生新實例

class SomeService { fun doSomething() { }}// 注冊 factory { SomeService()}// 獲取,每次resolve都會產生新實例val service1 = resolve<SomeService>() val service2 = resolve<SomeService>()

具名工廠

class NamedService(val name: String) { fun doSomething() { }}// 注冊 factory('a') { NamedService('aaa')}factory('b') { NamedService('bbb')}// 獲取// A1 與 A2 是使用同一工廠產生的不同實例// A1 與 B1 是使用不同工廠產生的不同實例val serviceA1 = resolve<NamedService>('a')val serviceA2 = resolve<NamedService>('a')val serviceB1 = resolve<NamedService>('b')val serviceB2 = resolve<NamedService>('b')

以上就是Android 簡單服務定位器模式實現的詳細內容,更多關于Android 簡單服務定位器模式的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 弥勒县| 二手房| 宾川县| 蒲江县| 双桥区| 绥德县| 巴彦县| 万宁市| 民丰县| 肇源县| 米泉市| 察雅县| 于田县| 蒲城县| 信宜市| 武陟县| 洞头县| 龙里县| 团风县| 夏邑县| 阿勒泰市| 定西市| 禄丰县| 普陀区| 老河口市| 全南县| 洞口县| 芦山县| 文昌市| 沙湾县| 玉龙| 五原县| 英吉沙县| 光泽县| 芦溪县| 牙克石市| 孙吴县| 钟祥市| 哈尔滨市| 开原市| 平遥县|