Android 简单服务定位器模式实现
程序员文章站
2022-04-17 13:19:07
依赖注入(dependency injection)和服务定位器(service locator)是实现控制反转(inversion of control)的两种主要手段。android的主流依赖注入...
依赖注入(dependency injection)和服务定位器(service locator)是实现控制反转(inversion of control)的两种主要手段。
android的主流依赖注入框架有:dagger 和 kion
这些依赖注入框架都感觉比较重。
服务定位器比如少见,这里提供一个一个简单的服务定位器模式实现。
引入
项目地址:
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 简单服务定位器模式的资料请关注其它相关文章!