尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

模板方法模式实战:解读 LoadingAndRetryManager 的 OnLoadingAndRetryListener 设计之美

模板方法模式实战:解读 LoadingAndRetryManager 的 OnLoadingAndRetryListener 设计之美 模板方法模式实战解读 LoadingAndRetryManager 的 OnLoadingAndRetryListener 设计之美【免费下载链接】LoadingAndRetryManager无缝为Activity、Fragment、任何View设置加载loading、重试(retry)和无数据empty页面。项目地址: https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManagerLoadingAndRetryManager 是一个能无缝为 Activity、Fragment 乃至任意 View 设置加载loading、重试retry和无数据empty页面的 Android 轻量框架而它的核心抽象类 OnLoadingAndRetryListener 正是模板方法模式Template Method Pattern的教科书级实战范例。本文将从零开始用最通俗的语言讲透模板方法模式的核心思想再逐层拆解 OnLoadingAndRetryListener 的设计之美最后附上新手也能轻松上手的接入步骤帮助你真正看懂优雅框架背后的设计逻辑。一、LoadingAndRetryManager 是什么一个解决页面状态切换的轻量框架开发 App 时几乎每个页面都要处理三种状态加载中、加载失败、数据为空。传统写法是在每个页面里重复堆代码而 LoadingAndRetryManager 的目标只有一个——把这三件事统一封装让任何页面只需几行代码就能拥有完整的加载-重试-空数据能力。它支持三种场景用法完全一致Activity在 onCreate 中调用LoadingAndRetryManager.generate(this, listener)即可Fragment用法与 Activity 完全相同任意 View把参数换成目标 View 即可比如对一个 TextView 单独设置加载重试状态。二、模板方法模式入门看懂固定骨架 自由钩子的核心思想在拆代码之前先用一个生活例子理解模板方法模式。想象你去一家快餐店固定流程算法骨架点餐 → 付款 → 取餐每个顾客都必须走这套流程可定制部分钩子方法汉堡要加辣吗可乐要冰的吗这些步骤由顾客自己决定。模板方法模式正是这个思路父类定义一个操作的算法骨架把其中某些步骤延迟到子类中实现。子类不改动整体结构却能重定义特定步骤这是设计模式中复用与扩展的典范也是本文要重点解读的核心关键词。三、OnLoadingAndRetryListener 源码结构模板方法模式的最佳实践OnLoadingAndRetryListener位于 loadingandretrymanager/src/main/java/com/zhy/base/loadandretry/OnLoadingAndRetryListener.java是一个抽象类它把如何生成三种页面、如何绑定事件拆成了三类方法1. 抽象方法必须实现的核心步骤setRetryEvent(View)是唯一必须覆写的抽象方法。重试按钮点下去要做什么重新加载数据还是跳转页面这个最后一步由使用者决定父类只负责在合适的时机调用它。2. 钩子方法可选覆写的定制入口setLoadingEvent、setEmptyEvent、generateLoadingLayout、generateRetryLayout、generateEmptyLayout等都属于钩子方法父类给出默认空实现返回 null 或 NO_LAYOUT_ID。想给某个页面定制专属的加载动画或空数据插画覆写对应钩子即可不影响其他页面。3. 模板方法固定不变的判断骨架isSetLoadingLayout()、isSetRetryLayout()、isSetEmptyLayout()是真正的模板方法——它们把用户是否自定义了布局这个判断流程固定下来只要子类覆写了 layoutId 或 layout 的任一钩子就返回 true。这套骨架对所有子类一视同仁稳定且可靠。四、LoadingAndRetryManager 如何驱动模板方法一看就懂的执行流程光有监听器还不够真正驱动这套流程的是 LoadingAndRetryManager.java。当你调用generate()时内部会依次执行根据传入对象Activity / Fragment / View找到内容容器把原内容包装进LoadingAndRetryLayout这个 FrameLayout依次调用setupLoadingLayout、setupRetryLayout、setupEmptyLayout完成页面装配最后回调 listener 的setRetryEvent、setLoadingEvent、setEmptyEvent让你绑定事件。其中第 3 步体现了清晰的优先级策略如果当前页面覆写了钩子方法就用页面级定制布局否则回退到全局默认布局在 Application 里配置的BASE_LOADING_LAYOUT_ID、BASE_RETRY_LAYOUT_ID、BASE_EMPTY_LAYOUT_ID。页面定制 全局默认这套规则让框架既灵活又统一。五、新手实战三分钟完成加载重试页面接入掌握了设计原理接入反而最简单。先在 Application 中配置全局默认布局LoadingAndRetryManager.BASE_RETRY_LAYOUT_ID R.layout.base_retry; LoadingAndRetryManager.BASE_LOADING_LAYOUT_ID R.layout.base_loading; LoadingAndRetryManager.BASE_EMPTY_LAYOUT_ID R.layout.base_empty;然后在 Activity 或 Fragment 中生成管理器并调用mLoadingAndRetryManager LoadingAndRetryManager.generate(this, new OnLoadingAndRetryListener() { Override public void setRetryEvent(View retryView) { // 在这里给重试按钮绑定事件例如重新发起请求 } });之后任何时刻只需调用showLoading()、showContent()、showRetry()、showEmpty()四个 API就能无缝切换四种页面状态且内部自动处理了线程安全非主线程调用也会自动切回主线程更新 UI。示例可参考 test/MainActivity.java 和 test/AnyViewTestActivity.java。六、为什么说这个设计很优雅模板方法模式的四大优势读完整个架构你会发现这个设计至少有四个不可替代的优点开闭原则的完美践行想增加新状态页面新增钩子方法即可无需改动已有代码高复用低重复全局默认布局一次配置所有页面共用彻底告别重复代码职责清晰解耦布局生成、事件绑定、状态切换各司其职互不干扰上手门槛极低新手只需实现一个抽象方法其余全部交给模板方法自动处理。七、总结从设计模式视角重新认识开源框架模板方法模式的价值在于用固定骨架 自由钩子的巧妙组合在灵活性与一致性之间找到了完美平衡。LoadingAndRetryManager 的 OnLoadingAndRetryListener 用不到 70 行代码就为整个框架注入了强大的扩展能力堪称 Android 设计模式实战的绝佳教材。想亲手体验这套设计可以执行git clone https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManager获取完整源码结合本文逐行研读相信你对模板方法模式的理解会再上一个台阶。【免费下载链接】LoadingAndRetryManager无缝为Activity、Fragment、任何View设置加载loading、重试(retry)和无数据empty页面。项目地址: https://gitcode.com/gh_mirrors/lo/LoadingAndRetryManager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表