android 定位模式,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 resolve(name: String = T::class.java.name): T?

// 注册为单例

inline fun singleton(name: String = T::class.java.name, crossinline block: () -> T)

// 注册为工厂

inline fun factory(name: String = T::class.java.name, crossinline block: () -> T)

使用

单例,每次resolve获得的都是同一实例

class SomeService {

fun doSomething() {

}

}

// 注册

singleton {

SomeService()

}

// 获取

val service = resolve()

具名单例

class NamedService(val name: String) {

fun doSomething() {

}

}

// 注册

singleton("a") {

NamedService("aaa")

}

singleton("b") {

NamedService("bbb")

}

// 获取

val serviceA = resolve("a")

val serviceB = resolve("b")

工厂,每次resolve都会产生新实例

class SomeService {

fun doSomething() {

}

}

// 注册

factory {

SomeService()

}

// 获取,每次resolve都会产生新实例

val service1 = resolve()

val service2 = resolve()

具名工厂

class NamedService(val name: String) {

fun doSomething() {

}

}

// 注册

factory("a") {

NamedService("aaa")

}

factory("b") {

NamedService("bbb")

}

// 获取

// A1 与 A2 是使用同一工厂产生的不同实例

// A1 与 B1 是使用不同工厂产生的不同实例

val serviceA1 = resolve("a")

val serviceA2 = resolve("a")

val serviceB1 = resolve("b")

val serviceB2 = resolve("b")

以上就是Android 简单服务定位器模式实现的详细内容,更多关于Android 简单服务定位器模式的资料请关注脚本之家其它相关文章!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值