我需要实现一个包含大约 50 个方法的接口(外部库,我无法控制)。
我不想使用 1000 行的单个类,而是希望使用多个类来实现围绕单个功能的一些方法,并有一个委托给功能类的“主要”实现类。
这可以使用 kotlin 中的委托来完成还是我需要在主类中实现每个方法?
不使用委托系统的示例代码:
class Main: ApiInterface {
private val f1 = Feature1()
private val f2 = Feature2()
override fun m1() = f1.m1()
override fun m2() = f1.m2()
override fun m3() = f2.m3()
override fun m4() = f2.m4()
}
class Feature1 {
fun m1() { ... }
fun m2() { ... }
}
class Feature2 {
fun m3() { ... }
fun m4() { ... }
}
Run Code Online (Sandbox Code Playgroud)
这可能与您的做法非常相似。问题是将您的Feature1和声明Feature2为接口并分别实现它们:
interface Feature1 {
fun m1()
fun m2()
}
interface Feature2 {
fun m3()
fun m4()
}
class Feature1Impl() : Feature1 {
override fun m1() {}
override fun m2() {}
}
class Feature2Impl : Feature2 {
override fun m3() {}
override fun m4() {}
}
Run Code Online (Sandbox Code Playgroud)
最后一步是使用 kotlins 委托语法简单地组合一个新类:
class ApiImpl :
Feature1 by Feature1Impl(),
Feature2 by Feature2Impl(),
ApiInterface
Run Code Online (Sandbox Code Playgroud)
或者使用构造函数参数:
class ApiImpl(feature1: Feature1, feature2: Feature2) :
Feature1 by feature1,
Feature2 by feature2,
ApiInterface
Run Code Online (Sandbox Code Playgroud)
请注意,您需要添加ApiInterface. 由于我们实现了所有必需的功能,因此编译器没有抱怨。
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |