状态模式运用
流程图
代码实现
定义登陆状态接口
interface IUserState {
fun like(context: Context)
fun comment(context: Context)
}
实现登陆登出状态
class LoginedState : IUserState {
override fun like(context: Context) {
Toast.makeText(context, "点赞", Toast.LENGTH_SHORT).show()
}
override fun comment(context: Context) {
Toast.makeText(context, "评论", Toast.LENGTH_SHORT).show()
}
}
class LogoutState : IUserState {
override fun like(context: Context) {
toLogin(context)
}
override fun comment(context: Context) {
toLogin(context)
}
private fun toLogin(context: Context) {
context.startActivity(Intent(context, LoginActivity::class.java))
}
}
定义管理登陆状态类
object LoginContext {
public var userState: IUserState = LogoutState()
fun like(context: Context) {
userState.like(context)
}
fun comment(context: Context) {
userState.comment(context)
}
}
定义主界面
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.like).setOnClickListener {
LoginContext.like(this)
}
findViewById<Button>(R.id.comment).setOnClickListener {
LoginContext.comment(this)
}
findViewById<Button>(R.id.to_login).setOnClickListener {
startActivity(Intent(this, LoginActivity::class.java))
}
findViewById<Button>(R.id.logout).setOnClickListener {
LoginContext.userState = LogoutState()
}
}
}
定义登陆界面
class LoginActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
findViewById<Button>(R.id.login).setOnClickListener {
LoginContext.userState = LoginedState()
finish()
}
}
}