上一篇不同渠道包的升级类包名和类名完全一样,同名类替换的方式。这一篇试下工厂模式。
google play渠道目录下,新建GooglePlayUpdater以及UpdaterFactory:

GooglePlayUpdater类实现如下:
Kotlin
package com.example.androiddemos.update
import android.app.Activity
import android.util.Log
class GooglePlayUpdater(private val activity: Activity) : IUpdateChecker {
override fun check(activity: Activity) {
// 使用Google Play的更新逻辑
Log.d("GooglePlayUpdater", "Checking for updates on Google Play")
// 待实现 ... ...
}
}
UpdaterFactory实现如下:
Kotlin
package com.example.androiddemos.update
import android.app.Activity
class UpdaterFactory {
fun getUpdater(activity: Activity): IUpdateChecker = GooglePlayUpdater(activity)
}
同理, nomal渠道目录下,新建NormalUpdater代码如下:
Kotlin
package com.example.androiddemos.update
import android.app.Activity
import android.util.Log
class NormalUpdater(private val activity: Activity) : IUpdateChecker {
override fun check(activity: Activity) {
// 使用normal channel的更新逻辑
Log.d("NormalUpdater", "Checking for updates on Normal channel")
// 待实现 ... ...
}
}
normal渠道再新建UpdaterFactory (注意,两个渠道的UpdaterFactory 类名和包名需要一致),代码如下:
javascript
package com.example.androiddemos.update
import android.app.Activity
class UpdaterFactory {
fun getUpdater(activity: Activity): IUpdateChecker = NormalUpdater(activity)
}
MainActivity增加一个测试按钮:
Kotlin
Button(
onClick = {
val updateChecker = UpdaterFactory().getUpdater(context as Activity)
updateChecker.check(context as Activity)
},
modifier = Modifier.padding(top = 16.dp)
) {
Text("check for update, 依赖注入/工厂模式")
}
开始测试, 先打GooglePlay的包,运行:

点击检查升级,日志:

ok. 同样,打normal渠道包,测试日志:

ok.