状态模式在JSF源码中的应用
由于源码中一般只提供一种通用的解决方案,所以状态模式的具体应用在源码中非常少见。本节来看 JSF 中的 Lifecycle 类。
这些状态的切换都在 Lifecycle 类的 execute() 方法中进行,其中会传入一个参数 FacesContext 对象,最终所有状态都被 FacesContext 保存。在此不深入分析。
在 JSF 中,所有页面的处理分为 7 个阶段,被定义在 PhaseId 类中,分别用不同的常量来表示周期阶段,源码如下。JSF 是一个比较经典的前端框架,没用过的小伙伴也没关系,这里只是分析一下其设计思想。
- private class PhaseId implements Comparable {
- ...
- private static final PhaseId[] values = {
- ANY_PHASE, // 任意一个生命周期阶段
- RESTORE_VIEW, // 恢复视图阶段
- APPLY_REQUEST_VALUES, // 应用请求值阶段
- PROCESS_VALIDATIONS, // 处理输入校验阶段
- UPDATE_MODEL_VALUES, // 更新模型的值阶段
- INVOKE_APPLICATION, // 调用应用阶段
- RENDER_RESPONSE // 显示响应阶段
- };
- ...
- }
- package javax.faces.lifecycle;
- import javax.faces.FacesException;
- import javax.faces.context.FacesContext;
- import javax.faces.event.PhaseListener;
- public abstract class Lifecycle {
- public Lifecycle() {
- }
- public abstract void addPhaseListener(PhaseListener var1);
- public abstract void execute(FacesContext var1) throws FacesException;
- public abstract PhaseListener[] getPhaseListeners();
- public abstract void removePhaseListener(PhaseListener var1);
- public abstract void render(FacesContext var1) throws FacesException;
- }
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算