面试题答案
一键面试1. 委托机制与代理模式概述
在Kotlin中,委托机制是一种代码复用的方式,它允许一个类(委托类)将部分功能委托给另一个对象(委托对象)。代理模式是一种设计模式,其中一个对象(代理)控制对另一个对象(被代理对象)的访问。Kotlin的委托机制可以很好地实现代理模式。
2. 创建委托类和委托对象的代码示例
// 定义接口
interface Service {
fun performAction()
}
// 被代理的类(真实实现类)
class RealService : Service {
override fun performAction() {
println("RealService is performing action")
}
}
// 委托类,通过委托机制实现代理模式
class ServiceProxy(private val realService: Service) : Service by realService {
// 可以在委托类中添加额外的逻辑,例如在调用真实方法前后添加日志等
override fun performAction() {
println("Proxy is about to call RealService")
realService.performAction()
println("Proxy has called RealService")
}
}
3. 原理和关键步骤解释
- 定义接口:
- 首先定义一个接口
Service
,它声明了代理类和被代理类都需要实现的方法performAction
。这个接口定义了代理和被代理对象共同的行为规范。
- 首先定义一个接口
- 创建被代理类:
RealService
类实现了Service
接口,它是实际执行操作的类,即真实服务的实现。
- 创建委托类:
ServiceProxy
类通过by
关键字将Service
接口的实现委托给realService
对象。这意味着ServiceProxy
类隐式地继承了realService
对象对Service
接口方法的实现。- 同时,
ServiceProxy
类可以重写performAction
方法,在调用realService.performAction()
前后添加额外的逻辑,如打印日志等,从而实现对被代理对象访问的控制,这正是代理模式的核心。
- 使用代理:
在fun main() { val realService = RealService() val proxy = ServiceProxy(realService) proxy.performAction() }
main
函数中,先创建RealService
实例,然后将其传递给ServiceProxy
构造函数创建代理对象。调用代理对象的performAction
方法时,会执行代理类中定义的逻辑,包括调用被代理对象的方法以及额外添加的逻辑。