23_状态模式

一、状态相关类

package com.study.state


class Activity {
    /**
     * 各个状态
     */
    companion object {
        val onCreateState = OnCreateState()
        val onStartState = OnStartState()
        val onResumeState = OnResumeState()
    }

    //当前activity状态
    var activityState: ActivityState =
        OnCreateState()
        set(value) {
            field = value
            activityState.activity = this
        }


    fun onCreate() {
        activityState?.onCreate()
    }


    fun onStart() {
        activityState?.onStart()
    }


    fun onResume() {
        activityState?.onResume()
    }
}
package com.study.state

abstract class ActivityState {

     var activity: Activity? = null

    abstract fun onCreate()
    abstract fun onStart()
    abstract fun onResume()
}
package com.study.state


class OnCreateState : ActivityState() {
    override fun onCreate() {
        println("当前Activity状态onCreate")
    }

    override fun onStart() {
        activity?.activityState = Activity.onStartState
    }

    override fun onResume() {
        activity?.activityState = Activity.onResumeState
    }
}
package com.study.state

class OnResumeState: ActivityState() {
    override fun onCreate() {
        activity?.activityState = Activity.onCreateState
    }

    override fun onStart() {
        activity?.activityState = Activity.onStartState
    }

    override fun onResume() {
        println("当前Activity状态onResume")
    }
}
package com.study.state

class OnStartState: ActivityState() {
    override fun onCreate() {
        activity?.activityState = Activity.onCreateState
    }

    override fun onStart() {
        println("当前Activity状态onStart")
    }

    override fun onResume() {
        activity?.activityState = Activity.onResumeState
    }
}

二、主程序调用

package com.study.state

/**
 * 定义和类型
   定义:允许一个对象在其内部状态改变时,改变他的行为
   类型:行为型

   适用场景
   一个对象存在多种状态(不同状态下行为不同),且状态可相互切换

   优点
   将不同的状态隔离
   把各种状态的转换逻辑,分布到State的子类中,减少相互间依赖

   缺点
   状态多的业务场景导致类数目增加,系统变复杂
 */
fun main() {
    val activity = Activity()
    activity.activityState = OnCreateState()

    println("当前状态:" + activity.activityState?.javaClass?.simpleName)

    //切换状态
    activity.onStart();
    println("当前状态:" + activity.activityState?.javaClass?.simpleName)

    activity.onResume()
    println("当前状态:" + activity.activityState?.javaClass?.simpleName)
}

三、运行结果

四、设计模式学习总结

坚持学习了一个左右时间的设计模式,我对设计模式有了更深刻的了解。非常感谢提供学习资源的大佬。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值