面试题答案
一键面试-
定义策略接口:
interface TextProcessingStrategy { fun process(text: String): String }
解释:这是一个接口,定义了文本处理的抽象方法
process
,每种具体的处理策略都要实现这个方法。 -
实现具体策略:
- 转为大写策略:
class ToUpperCaseStrategy : TextProcessingStrategy { override fun process(text: String): String { return text.toUpperCase() } }
- 转为小写策略:
class ToLowerCaseStrategy : TextProcessingStrategy { override fun process(text: String): String { return text.toLowerCase() } }
- 去除空格策略:
class RemoveWhitespaceStrategy : TextProcessingStrategy { override fun process(text: String): String { return text.replace("\\s".toRegex(), "") } }
解释:这些类实现了
TextProcessingStrategy
接口,具体实现了不同的文本处理逻辑。 -
使用高阶函数定义策略类型:
typealias TextProcessingFunction = (String) -> String
解释:
TextProcessingFunction
是一个高阶函数类型别名,它接受一个String
类型的参数并返回一个String
类型的结果,与TextProcessingStrategy
接口中的process
方法签名一致。 -
文本处理系统类:
class TextProcessingSystem { private lateinit var strategy: TextProcessingStrategy fun setStrategy(strategy: TextProcessingStrategy) { this.strategy = strategy } fun setStrategy(strategy: TextProcessingFunction) { this.strategy = object : TextProcessingStrategy { override fun process(text: String): String { return strategy(text) } } } fun processText(text: String): String { return strategy.process(text) } }
解释:
TextProcessingSystem
类持有一个TextProcessingStrategy
实例。setStrategy
方法有两个重载版本,一个接受TextProcessingStrategy
实例,另一个接受TextProcessingFunction
(高阶函数),通过匿名内部类将高阶函数适配为TextProcessingStrategy
接口的实现。processText
方法调用当前设置的策略来处理文本。 -
示例使用:
fun main() { val system = TextProcessingSystem() // 使用类实现的策略 system.setStrategy(ToUpperCaseStrategy()) println(system.processText("hello world")) // 使用高阶函数作为策略 system.setStrategy { it.replace("o", "0") } println(system.processText("hello world")) }
解释:在
main
函数中,首先通过设置ToUpperCaseStrategy
类的实例来处理文本,然后通过设置一个高阶函数来替换文本中的字符,展示了两种不同方式设置策略并处理文本。