23_state mode

1. Status related classes

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
    }
}

Second, the main program call

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)
}

Three, running results

Four, design pattern learning summary

After persisting in learning a time-sensitive design pattern, I have a deeper understanding of design patterns. Thank you very much for providing learning resources.

Instructed by Mr. Ma Yingjun from Tsinghua University - Detailed explanation of 23 Java design patterns

Shang Silicon Valley Java Design Pattern (Illustration + Analysis of Framework Source Code)

Java design pattern talks about Debug mode + memory analysis

Guess you like

Origin blog.csdn.net/Duckdan/article/details/111988402