Android-delegate委托模式

委托模式,与java继承不同的是,它体现的是代码组合的思想。解决问题思路是将委托对象中的某些操作交给其他被委托对象。可以将代码分离,使得某个对象不是那么臃肿。

这是最简单的委托模式:

Print 中的 fun print()被委托给RealPrint,fun print()打印。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fun main() {
var print = Print()
print.print()
}
//委托模式。将某个对象中的操作委托给其他对象,是代码组合的思想

public class RealPrint() {
//被委托者
fun print() {
print("yeah, it is realPrint")
}
}

public class Print() {
//委托者
var realPrint: RealPrint = RealPrint()
fun print() {
realPrint.print()
}
}

使用接口实现委托是很常见的一种模式。

1、委托类实现接口方法,然后创建接口引用去掉用接口方法。

2、委托类中function创建被委托类instance.

3、被委托类实现接口,接口function中具体执行代码。

4、委托类切换interface引用instance, 执行function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
fun main(){
var executeMe:ExecuteMe = ExecuteMe()
executeMe.toDelegateFirst()
executeMe.delegateFirst()
executeMe.delegateSecond()
executeMe.toDelegateSecond()
executeMe.delegateFirst()
executeMe.delegateSecond()
}

//使用接口的委托模式
interface Delegateinterface{
fun delegateFirst()
fun delegateSecond()
}

//被委托类
class DelegateFirst:Delegateinterface{
override fun delegateFirst() {
print("yeah! it's ${javaClass.name} delegateFirst()")
}

override fun delegateSecond() {
print("yeah! it's ${javaClass.name} delegateSecond()")
}

}

//被委托类
class DelegateSecond:Delegateinterface{
override fun delegateFirst() {
print("yeah! it's ${javaClass.simpleName} delegateFirst()")
}

override fun delegateSecond() {
print("yeah! it's ${javaClass.name} delegateSecond()")
}

}

//委托类
class ExecuteMe: Delegateinterface{
lateinit var delegateinterface:Delegateinterface
override fun delegateFirst() {
delegateinterface.delegateFirst()
}

override fun delegateSecond() {
delegateinterface.delegateSecond()
}

fun toDelegateFirst(){
delegateinterface = DelegateFirst()
}

fun toDelegateSecond(){
delegateinterface = DelegateSecond()
}
}

Android-delegate委托模式
http://example.com/2021/11/24/Android-delegate委托模式/
作者
xdd
发布于
2021年11月24日
许可协议