📜  Kotlin 中的代表团

📅  最后修改于: 2022-05-13 01:55:14.007000             🧑  作者: Mango

Kotlin 中的代表团

委派控制任何对象从一个实例到另一个实例的权力/权限分配。对于类和函数实现,委托可以用于它们之间的静态和可变关系。类和函数中的继承实现可以在委托技术的帮助下进行更改,面向对象的编程语言天生就支持它,而无需任何样板代码。 Kotlin 中借助“by”关键字使用委托。

Kotlin 中有两种类型的委托:
显式委托:所有面向对象的语言都支持,它是通过将委托(要实现的那个)对象传递给委托对象(将实现委托对象的那个)来完成的。
隐式委派:需要对委派模式的语言级支持。

让我们借助示例讨论委托概念
示例 1:

正如我们所知,在 Kotlin 中,继承为我们提供了在委托时不可变的对象之间的永久静态关系,这一事实使委托成为一个非常强大的替代方案。在这个例子中, 使用 Newfeature 类,我们可以通过委托其所有公共成员(即 mymessage 和 messageline)来实现具有新功能的委托基类,我们在“by”关键字的帮助下使用此实现。

Kotlin
// Kotlin program to illustrate the 
// concept of delegation
  
interface delegation 
{
    fun mymessage()
    fun mymessageline()
}
  
class delegationimplementation(val y: String) : delegation
{
    override fun mymessage() 
    { 
        print(y)
    }
    override fun mymessageline() 
    { 
        println(y)
    }
}
  
class Newfeature(m: delegation) : delegation by m
{
    override fun mymessage() 
    {
        print("GeeksforGeeks")
    }
}
  
// Main function
fun main() 
{
    val b = delegationimplementation("\nWelcome, GFG!")
      
    Newfeature(b).mymessage()
    Newfeature(b).mymessageline()
}


Kotlin
// Kotlin program to illustrate the 
// concept of delegation
interface delegation
{
    val value: String
    fun mymessage()
}
  
class delegationimplementation(val y: String) : delegation
{
    override val value = "delegationimplementation y = $y"
    override fun mymessage() 
    {
        println(value)
    }
}
  
class Newfeatures(a: delegation) : delegation by a 
{
    override val value = "GeeksforGeeks"
}
  
fun main() 
{
    val b = delegationimplementation("Hello!GFG")
    val derived = Newfeatures(b)
      
    derived.mymessage()
    println(derived.value)
}


输出:

GeeksforGeeks
Welcome, GFG!


示例 2:

在此示例中,我们有一个委托基类,其 val 值和方法“fun message()”。在委托实现类中,我们为这个“有趣的消息”赋值,稍后我们在另一个类中使用这个实现,使用“by”关键字添加一个具有相同 val 值的新语句;

科特林

// Kotlin program to illustrate the 
// concept of delegation
interface delegation
{
    val value: String
    fun mymessage()
}
  
class delegationimplementation(val y: String) : delegation
{
    override val value = "delegationimplementation y = $y"
    override fun mymessage() 
    {
        println(value)
    }
}
  
class Newfeatures(a: delegation) : delegation by a 
{
    override val value = "GeeksforGeeks"
}
  
fun main() 
{
    val b = delegationimplementation("Hello!GFG")
    val derived = Newfeatures(b)
      
    derived.mymessage()
    println(derived.value)
}

输出:

delegationimplementation y = Hello!GFG
GeeksforGeeks

好处:

1.它是一种灵活、强大且可变的方法。
2. 可以在已有接口的帮助下实现多个接口。
3. 它用于为当前的实现添加新的特性和价值。