`
barryzhong
  • 浏览: 21389 次
  • 性别: Icon_minigender_1
社区版块
存档分类

生命周期组件框架:生命周期描述语言——生命周期事件示例

阅读更多
   public static class TestLifecycleEventHandler implements LifecycleEventHandler {

        static List<LifecycleEvent> eventList = new ArrayList<>();

        @Override
        public void onEvent(LifecycleEvent event) {
            eventList.add(event);
        }
    }

    @Test
    public void test_lifecycle_event() throws VerificationException {
        @LifecycleRegistry({ CustomerObject.class, TestLifecycleEventHandler.class })
        @StateMachineBuilder
        class Registry extends AbsStateMachineRegistry {

            protected Registry() throws VerificationException {}
        }
        new Registry();
        assertEquals(0, TestLifecycleEventHandler.eventList.size());
        final CustomerObject customer = new CustomerObject();
        assertEquals(0, TestLifecycleEventHandler.eventList.size());
        customer.confirm();
        {
            assertEquals(1, TestLifecycleEventHandler.eventList.size());
            LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
            assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Draft.class,
                    CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class, CustomerStateMachine.Transitions.Confirm.class);
        }
        customer.suspend();
        {
            assertEquals(2, TestLifecycleEventHandler.eventList.size());
            LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
            assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class,
                    CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceSuspended.class,
                    CustomerStateMachine.States.Confirmed.Transitions.Suspend.class);
        }
        customer.resume();
        {
            assertEquals(3, TestLifecycleEventHandler.eventList.size());
            LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
            assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceSuspended.class,
                    CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class, CustomerStateMachine.States.Confirmed.Transitions.Resume.class);
        }
        customer.terminateService();
        {
            assertEquals(4, TestLifecycleEventHandler.eventList.size());
            LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
            assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class,
                    CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceExpired.class,
                    CustomerStateMachine.States.Confirmed.Transitions.TerminateService.class);
        }
        customer.renew();
        {
            assertEquals(5, TestLifecycleEventHandler.eventList.size());
            LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
            assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceExpired.class,
                    CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class, CustomerStateMachine.States.Confirmed.Transitions.Renew.class);
        }
        customer.terminateService();
        {
            assertEquals(6, TestLifecycleEventHandler.eventList.size());
            LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
            assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.InService.class,
                    CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceExpired.class,
                    CustomerStateMachine.States.Confirmed.Transitions.TerminateService.class);
        }
        customer.abandon();
        {
            assertEquals(7, TestLifecycleEventHandler.eventList.size());
            LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
            assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Confirmed.ConfirmedStates.ServiceExpired.class,
                    CustomerStateMachine.States.Recycled.class, CustomerStateMachine.States.Confirmed.Transitions.Abandon.class);
        }
        customer.putBack();
        {
            assertEquals(8, TestLifecycleEventHandler.eventList.size());
            LifecycleEvent lifecycleEvent = TestLifecycleEventHandler.eventList.get(TestLifecycleEventHandler.eventList.size() - 1);
            assertLifecycleEvent(customer, lifecycleEvent, CustomerStateMachine.States.Recycled.class, CustomerStateMachine.States.Draft.class,
                    CustomerStateMachine.Transitions.PutBack.class);
        }
        try {
            customer.renew();
        } catch (LifecycleException e) {
            assertEquals(8, TestLifecycleEventHandler.eventList.size());
        }
    }

    private void assertLifecycleEvent(CustomerObject reactiveObject, LifecycleEvent lifecycleEvent, Class<?> fromClass, Class<?> toClass, Class<?> transition) {
        assertEquals(reactiveObject, lifecycleEvent.getReactiveObject());
        assertEquals(fromClass.getSimpleName(), lifecycleEvent.fromState());
        assertEquals(toClass.getSimpleName(), lifecycleEvent.toState());
        assertEquals(transition.getSimpleName(), lifecycleEvent.transition());
        assertEquals(TransitionTypeEnum.Common, lifecycleEvent.transitionType());
    }

 前文:生命周期组件框架——关系型状态及服务

分享到:
评论

相关推荐

    [已更新Demo附件]生命周期组件框架——关系型状态机服务

    近期,我深入研究了一个名为“生命周期组件框架——关系型状态机服务”的框架,其旨在简化这一过程,并通过关系型状态机来管理组件的生命周期。接下来,我将详细介绍这个框架的核心概念、源码实现以及其作为工具的...

    生命周期钩子函数——domo.zip

    在这个"生命周期钩子函数——domo.zip"压缩包中,我们可能找到了关于React组件生命周期和实现轮播图案例的代码示例。 首先,我们要理解React组件的生命周期分为三个主要阶段:挂载阶段(Mounting)、更新阶段...

    【OpenHarmony】ArkTS 语法基础 ③ ( 自定义组件生命周期回调函数 - 页面生命周期回调函数 )

    【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 ) https://hanshuliang.blog.csdn.net/article/details/139424435 博客源码快照 一、ArkTS @Component ...

    Angular中的生命周期函数--动态挂载销毁组件

    本篇文章将深入探讨"Angular中的生命周期函数——动态挂载销毁组件"这一主题。 1. 组件的生命周期 组件从创建到销毁的过程中会经历多个阶段,每个阶段都有特定的生命周期钩子与之对应。理解这些钩子对于优化性能和...

    android activity生命周期示例代码

    android activity生命周期示例代码。里面包含activity执行finish之后的生命周期,旋转的生命周期。切换以及返回activity的生命周期。我的博客地址:http://blog.csdn.net/qq_16064871

    vue.js组件示例:小学竖式与拖式20题练习

    在“vue.js组件示例:小学竖式与拖式20题练习”这个项目中,开发者构建了一个教育应用程序,旨在帮助小学生进行数学练习,特别是竖式运算和拖拽解答方式的题目。下面我们将深入探讨这个项目中的关键知识点。 首先,...

    Activity生命周期示例

    在Android应用开发中,Activity是用户界面的基本单元,它负责展示...在提供的`Activity_04`文件中,可能包含了演示这些生命周期方法变化的代码示例,通过学习和分析这些示例,开发者可以加深对Activity生命周期的理解。

    tomcat 生命周期,和事件管理—— lifeCycle & event

    标题 "Tomcat 生命周期与事件管理——LifeCycle & Event" 涉及到的是Apache Tomcat服务器的核心运行机制。Tomcat是Java Servlet和JavaServer Pages(JSP)技术的开源Web应用服务器,它遵循Java EE规范,是开发和部署...

    Android activity生命周期示例

    本示例项目“Android activity生命周期示例”旨在帮助开发者深入理解Activity的生命周期及其各个阶段,这对于优化用户体验和资源管理至关重要。 Activity的生命周期包括以下几个主要状态: 1. **创建(Created)**...

    理解Flex3的组件和框架的生命周期

    ### 理解Flex3的组件和框架的生命周期 #### 一、引言 Adobe Flex 框架作为一款强大的富互联网应用开发工具,在其发展过程中展现出了卓越的技术能力和广泛的适用性。然而,正如文中所述,尽管 Flex 框架提供了详尽...

    react-一个npm包用于跟踪和可视化任意React组件的生命周期方法

    这个名为"react-一个npm包用于跟踪和可视化任意React组件的生命周期方法"的资源提供了一个工具,帮助开发者理解和调试React组件的生命周期。在React中,组件有三个主要的生命周期阶段:挂载阶段(Mounting)、更新...

    Vue v-for computed 生命周期和模板引用 语法示例演示代码

    Vue v-for computed 生命周期和模板引用 语法示例演示代码Vue v-for computed 生命周期和模板引用 语法示例演示代码Vue v-for computed 生命周期和模板引用 语法示例演示代码Vue v-for computed 生命周期和模板引用 ...

    Android四大基本组件介绍与生命周期 pdf 介绍

    ### Android四大基本组件及其生命周期详解 #### 一、Android四大基本组件概述 Android四大基本组件是Android应用程序的核心组成部分,它们分别是Activity、Service、ContentProvider和BroadcastReceiver。这四个...

    rxjava+自动+生命周期+autodispose

    - **生命周期绑定**:Autodispose能够将RxJava的Observable、Flowable或其他数据流自动绑定到Android的生命周期组件(如Activity、Fragment)。一旦生命周期组件销毁,订阅也会自动取消,防止内存泄漏。 - **简单...

    vue3+ts (源码+笔记+生命周期截图)

    此外,还新增了一些生命周期钩子,如 `onMounted`、`onUpdated` 和 `onActivated` 等,使得组件状态管理更为精确。 8. **模板语法增强**:Vue3 的模板语法也有所增强,如模板中的条件表达式和循环语句更加强大,...

    Activity生命周期与启动模式

    理解Activity的生命周期和启动模式对于开发高效、稳定的应用至关重要。让我们深入探讨Activity的7大生命周期以及4种启动模式。 **Activity生命周期** Activity的生命周期包括了从创建到销毁的各个阶段,主要有以下...

    《软件开发生命周期与统一建模语言UML》-电子教案

    《软件开发生命周期与统一建模语言UML》是一门深度探讨软件工程核心概念的课程,其中涵盖了软件开发过程的各个阶段以及UML这一强大的建模工具。这门电子教案以PPT的形式提供了丰富的教学资源,旨在帮助学习者理解和...

    Android-Disposer使用Android的生命周期轻松部署RxJava流

    在描述"Disposer:使用Android的生命周期轻松部署RxJava流"中,我们可以理解Disposer的核心功能是它与Android组件的生命周期紧密集成。这意味着当Activity或Fragment被销毁时,Disposer会自动取消相关的RxJava订阅,...

    JSF生命周期及组件开发P

    通过示例程序,开发者可以深入理解这些阶段如何协同工作,以及如何在不同场景下适当地介入和调整JSF生命周期。总的来说,JSF生命周期提供了一个结构化的框架,使得开发者能够更专注于业务逻辑和用户界面的实现,而...

    小程序——模板示例.rar

    4. **页面生命周期**:小程序的每个页面都有其特定的生命周期,包括onLoad、onShow、onReady、onHide、onUnload等方法,开发者可以根据这些生命周期钩子函数来处理页面的加载、显示、隐藏和卸载等状态。 5. **数据...

Global site tag (gtag.js) - Google Analytics