forked from dbacinski/Design-Patterns-In-Kotlin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathState.kt
50 lines (39 loc) · 1.15 KB
/
State.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import AuthorizationState.Authorized
import AuthorizationState.Unauthorized
sealed class AuthorizationState {
class Unauthorized : AuthorizationState()
class Authorized(val userName: String) : AuthorizationState()
}
class AuthorizationPresenter {
private var state: AuthorizationState = Unauthorized()
fun loginUser(userLogin: String) {
state = Authorized(userLogin)
}
fun logoutUser() {
state = Unauthorized()
}
val isAuthorized: Boolean
get() {
when (state) {
is Authorized -> return true
else -> return false
}
}
val userLogin: String
get() {
when (state) {
is Authorized -> return (state as Authorized).userName
is Unauthorized -> return "Unknown"
}
}
override fun toString(): String {
return "User '$userLogin' is logged in: $isAuthorized"
}
}
fun main(args: Array<String>) {
val authorization = AuthorizationPresenter()
authorization.loginUser("admin")
println(authorization)
authorization.logoutUser()
println(authorization)
}