javax.faces.lifecycle.LifeCycle实现了状态模式,其execute()方法的行为取决于JSF生命周期的当前阶段(即状态)。

添加依赖:

        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>1.2</version>
        </dependency>

LifeCycle:

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

与策略模式的比较:

  1. 状态模式与策略模式的类图完全一样,但是两个模式的意图和用法都不同。
  2. 策略模式允许客户端根据需要动态切换算法。
  3. 状态模式的状态对象则是不允许客户感知的,状态的变化由客户请求的操作驱动,属于模式内部处理部分。