赞
踩
六、设计模式
1、函数式的对象——invoke约定
Kotlin的约定有很多种,而比如使用便捷的get操作,以及重载运算符等等,invoke约定也仅仅是一种约定而已;我们可以把lambda表达式或者函数直接 保存在一个变量中,然后就像执行函数一样直接执行这个变量,这样的变量通常声明的时候都被我们赋值了已经直接定义好的lambda,或者通过成员引用而获取到的函数;但是别忘了,在面向对象编程中,一个对象在通常情况下都有自己对应的类,那我们能不能定义一个类,然后通过构造方法来产生一个对象,然后直接执行它呢?这正是invoke约定发挥作用的地方。
- class A(val str: String) {
- operator fun invoke() {
- println(str)
- }
- }
- fun main(args: Array<String>) {
- val a = A("Hello")
- a()
- }
- 输出:Hello
我们只需要在一个类中使用operator来修饰invoke函数,这样的类的对象就可以直接像一个保存lambda表达式的变量一样直接调用,而调用后执行的函数就是invoke函数。
2、策略模式就是将不同的行为策略进行独立封装,与类在逻辑上解耦。即不同的策略类实现不同的接口,在调用策略的时候传不同的类对象进去即可。可以用高阶函数简化策略模式,把策略类改成策略方法,作为参数传到高阶函数。
3、责任链模式就是避免请求的接收者和发送者质检的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理完为止。
七、函数式编程
函数式编程是关于不变性和函数组合的编程范式。特征如下:
一等函数支持:函数也是一种数据类型,可以作为参数传入另一个函数中,同时函数也可以返回一个函数。
纯函数和不变性:纯函数指的是没有副作用的函数(不去改变外部数据状态)。函数式编程是转换数据而不是改变数据。
函数的组合:在面向对象编程中是通过对象之间发送消息来构建程序逻辑的;在函数式编程中是通过不同函数组合来构建程序逻辑的。
1. 高阶函数
高阶函数是将函数用作参数或者返回值的函数。Kotlin的Collection类型中有大量的这种高阶函数,例如:Iterable的filter函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。