Kotlin设计模式-状态
来源:互联网 发布:矩阵的雅可比矩阵 编辑:程序博客网 时间:2024/06/05 10:39
前言
(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
摘自百度百科-状态模式
简单来说就是:允许一个对象在其内部状态改变时改变它的行为。
Kotlin中的状态模式
可以使用sealed class(密封类),来简化状态之间的关系,之前在Java 中,可以使用父类或接口的方式来实现,但是在Kotlin中sealed class(密封类)可以简化这样的实现。
Ktolin sealed class(密封类)
此处仅展示Kotlin 1.1之后的 sealed class(密封类)特性。
sealed class Expr data class Const(val number: Double) : Expr() data class Sum(val e1: Expr, val e2: Expr) : Expr() object NotANumber : Expr()
sealed class 不可以被其他类继承,其子类必须在同一文件中,但其子类的子类可以放在其他文件中。
when 语句对sealed class 有功能增强,可以在when语句中直接使用。
show me code
//kotlin 1.1 sealed class 可以没有{}sealed class LoginState { class Logout : LoginState() class Login(val userName: String) : LoginState()}class LoginPresenter { private var state: LoginState = Logout() fun loginUser(userLogin: String) { state = Login(userLogin) } fun logoutUser() { state = Logout() } val isLogin: Boolean get() { when (state) { is Login -> return true else -> return false } } val userLogin: String get() { when (state) { is Login -> return (state as Login).userName is Logout -> return "Unknown" } } override fun toString(): String { return "User '$userLogin' is logged in: $isLogin" }}
调用代码
val loginPresenter = LoginPresenter()loginPresenter.loginUser("admin")println(loginPresenter)loginPresenter.logoutUser()println(loginPresenter)
阅读全文
0 0
- Kotlin设计模式-状态
- Kotlin设计模式
- Kotlin设计模式
- Kotlin设计模式
- Kotlin设计模式
- Kotlin 设计模式-工厂
- Kotlin 设计模式-策略
- Kotlin 设计模式-命令
- Kotlin 设计模式-访问者
- Kotlin 设计模式-适配器
- Kotlin 设计模式-观察者
- Kotlin设计模式-外观
- Kotlin 设计模式-建造者
- Kotlin实现MVP设计模式
- Kotlin设计模式-单例
- Kotlin 设计模式-装饰器
- 设计模式:状态模式
- 设计模式-----状态模式
- unity自动设置Assetbundle包名
- 使用递归和非递归方式反转单向链表
- Sqoop常见错误及解决方式
- h5中多选框+通过身份证号做出性别年龄出生日期+用if点击切换颜色+加减乘除的应用
- 剑指offer66
- Kotlin设计模式-状态
- Invalid HTTP Connection : ADS in adobe forms
- Unity3D 5.6无法新建项目
- 文件上传与下载
- 如何自己开发一款js或者jquery插件
- 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]
- python入门(1)
- 构建拓扑
- POJ