委托模式,与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() } }
|