Android 简单服务定位器模式实现

 更新时间:2021年03月27日 09:33:49   作者:ezy  
这篇文章主要介绍了Android 简单服务定位器模式实现,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

依赖注入(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 LaunchMode四种启动模式详细介绍

    Android LaunchMode四种启动模式详细介绍

    这篇文章主要介绍了Android LaunchMode四种启动模式详细介绍的相关资料,这里对launchmode的使用方法进行了详解及启动模式的比较,需要的朋友可以参考下
    2016-12-12
  • Jetpack Compose入门基础全面精讲

    Jetpack Compose入门基础全面精讲

    开始布局部分。这部分我个人感觉没有必要每个组件、属性都详细说到,否则篇幅会很长。建立起Compose中的组件与 Android Views的一个对应关系就够了。具体还是需要在实际的使用中去熟悉
    2022-10-10
  • Android实现语音合成与识别功能

    Android实现语音合成与识别功能

    这篇文章主要为大家详细介绍了Android实现语音合成与识别功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Android刷新加载框架详解

    Android刷新加载框架详解

    这篇文章主要为大家详细介绍了Android刷新加载框架的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Flutter实现给图片添加涂鸦功能

    Flutter实现给图片添加涂鸦功能

    这篇文章主要介绍了利用Flutter实现给图片添加涂鸦功能,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • Android 通过Intent使用Bundle传递对象详细介绍

    Android 通过Intent使用Bundle传递对象详细介绍

    这篇文章主要介绍了Android 通过Intent使用Bundle传递对象详细介绍的相关资料,并附实例代码讲解,具有一定的参考价值,需要的朋友可以参考下
    2016-11-11
  • Android中button的onClick事件几种方法

    Android中button的onClick事件几种方法

    这篇文章主要介绍了Android中button的onClick事件几种方法的相关资料,这里提供三种方法,实现监听事件,需要的朋友可以参考下
    2017-09-09
  • Android实现同频共帧动画效果

    Android实现同频共帧动画效果

    我们听过“同频共振”,其原理是多个物体物体以同样的频率振动,但是本篇实现的效果是“同频共帧”,含义是:动画以同样的频率和同样的帧展示在多个不同View上,文中通过代码示例介绍的非常详细,感兴趣的同学可以自己动手尝试一下
    2024-01-01
  • 详解android特性之CoordinatorLayout用法探析实例

    详解android特性之CoordinatorLayout用法探析实例

    本篇文章主要介绍了android特性之CoordinatorLayout用法探析实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Android7.0中关于ContentProvider组件详解

    Android7.0中关于ContentProvider组件详解

    本文描述了Android7.0中关于ContentProvider组件实现原理以及ContentProvider发布者和调用者这两在Framework层是如何实现的。
    2017-11-11

最新评论