状态模式在JSF源码中的应用
由于源码中一般只提供一种通用的解决方案,所以状态模式的具体应用在源码中非常少见。本节来看 JSF 中的 Lifecycle 类。
在 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 // 显示响应阶段 }; ... }这些状态的切换都在 Lifecycle 类的 execute() 方法中进行,其中会传入一个参数 FacesContext 对象,最终所有状态都被 FacesContext 保存。在此不深入分析。
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
- 大数据
- 云计算