Kotlin 设计模式-策略

来源:互联网 发布:激光洗眉机网络假货 编辑:程序博客网 时间:2024/06/03 18:23

前言

策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。
策略模式:
定义了一族算法(业务规则);
封装了每个算法;
这族的算法可互换代替(interchangeable)。

摘自维基百科-策略模式

通俗一点的说法是,在代码执行过程中根据传递进来不同的对象,执行传递进来对象中的相同的操作。

Kotlin 中的策略模式

在Java中策略模式一般使用一个接口来定义一族算法,这个接口可以是简单的函数接口,也可以是复杂的自定义接口。在Kotlin中因为lambda表达式可以作为方法的参数,所以可以简化函数接口定义以简化代码。

Kotlin Lambda

此处仅展示lambda表达式作为方法参数

//声明 名为func 的 参数,该参数类型为lambda 表达式//val func : (String) -> String lambda class Printer(val func : (String) -> String) {    fun printString(string: String) = println(func.invoke(string))}

不清楚lambda为何物的亲,请自行度娘、谷哥。。。

show me code

class Printer(val formatterStrategy: (String) -> String) {    fun printString(string: String) = println(formatterStrategy.invoke(string))}

调用代码如下

val lowerCasePrinter = Printer{ it.toLowerCase() }lowerCasePrinter.printString("hello World! THIS IS STRATEGY PATTERN")val upperCasePrinter = Printer{ it: String -> it.toUpperCase() }upperCasePrinter.printString("hello World! THIS IS STRATEGY PATTERN")val prefixPrinter = Printer{ "Prefix: " + it }prefixPrinter.printString("hello World! THIS IS STRATEGY PATTERN")
原创粉丝点击