双拼、kotlin、依赖倒置

10 篇文章 0 订阅
6 篇文章 0 订阅

最近在练习用双拼打字。
双拼,即每个字都用两个键打出来。
比如,“中国”这两个字,用全拼打出来的话,需要按的键是:z、h、o、n、g、g、u、o。
如果是双拼(以小鹤双拼为例),就是v、s、g、o。
这相当于很多的快捷键,一个键可以代表多个字母:
v(zh)、s(ong)、g(g)、o(uo)。
按键少了,速度自然更快,字的匹配度也会变高。
只是这些快捷键的记忆需要练习。

这种将汉字分为 声母 + 韵母 的方式,让我想到了设计模式中的依赖倒置原则。
依赖倒置原则,即面向接口编程,模块之间的依赖关系通过接口发生。
这样设计下来,接口不依赖于实现类,实现类依赖接口。
因为人类认识自然界,是先看到细节,再从细节总结出抽象,所以抽象依赖于细节。
而在这样的模式中,是先约定了抽象,然后才有的实现细节,所以细节依赖于抽象,所以这个原则叫依赖倒置。

说完依赖倒置,再来看看双拼,在这里,声母是一个接口,韵母是一个接口,所有的汉字都是这两个接口的组合。
将汉字进行这样的分类后,打字的频率固定,可能刚开始速度并没有很明显的提升,但节奏感却突飞猛进。
林语堂说,一切艺术的问题,都是节奏的问题。
当节奏感变得明朗,打字似乎也变成一种艺术。

在编程中,我想大家最讨厌的,应该就是特殊情况,要处理特殊情况,就会出现成堆的 if/else,令人头大。
这时就可以运用依赖倒置原则,使用接口来代替 if/else,上层只处理接口,每种情况对应一个接口的实现。
比如 kotlin 中,相比于 Java,没有基础类型,所有的类型都是对象这个接口的实现。
没有 void,新增了 Unit,统一了函数的参数类型,所有的参数都是类型这个接口的实现。

程序是抽象的艺术,它需要找到自己的节奏。而合适的接口,往往就是合适的节奏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin 依赖注入是一种设计模式,它可以帮助我们解耦代码并提高可测试性。Kotlin 中常用的依赖注入框架有 Koin 和 Dagger2。 Koin 是一个轻量级的依赖注入框架,它使用 Kotlin 语言特性来实现依赖注入。Koin 简单易用,不需要编写任何代码,只需要定义模块和依赖关系即可。以下是一个使用 Koin 进行依赖注入的示例: ```kotlin // 定义一个模块 val appModule = module { single { NetworkService() } factory { UserRepository(get()) } viewModel { MainViewModel(get()) } } // 在 Application 中初始化 Koin class MyApp : Application() { override fun onCreate() { super.onCreate() startKoin { androidContext(this@MyApp) modules(appModule) } } } // 在 Activity 中使用依赖注入 class MainActivity : AppCompatActivity() { private val viewModel: MainViewModel by viewModel() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 使用 viewModel viewModel.doSomething() } } ``` Dagger2 是一个功能强大的依赖注入框架,它可以在编译时生成依赖注入代码,提高运行时的性能。Dagger2 的使用比 Koin 更为复杂,需要定义组件、模块、依赖关系等。以下是一个使用 Dagger2 进行依赖注入的示例: ```kotlin // 定义一个模块 @Module class AppModule { @Provides fun provideNetworkService(): NetworkService { return NetworkService() } @Provides fun provideUserRepository(networkService: NetworkService): UserRepository { return UserRepository(networkService) } } // 定义一个组件 @Component(modules = [AppModule::class]) interface AppComponent { fun inject(activity: MainActivity) } // 在 Application 中初始化 Dagger2 class MyApp : Application() { lateinit var appComponent: AppComponent override fun onCreate() { super.onCreate() appComponent = DaggerAppComponent.builder() .build() } } // 在 Activity 中使用依赖注入 class MainActivity : AppCompatActivity() { @Inject lateinit var viewModel: MainViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 注入依赖 (application as MyApp).appComponent.inject(this) // 使用 viewModel viewModel.doSomething() } } ``` 总体来说,Koin 适合小型项目和快速原型开发,而 Dagger2 则适合大型项目和需要高性能的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值