点击打开转载处链接
状态模式(State Pattern)是设计模式的一种,属于行为模式。
定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态
的一系列类中,可以把复杂的判断逻辑简化。
意图:
允许一个对象在其内部状态改变时改变它的行为
适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
状态模式(State Pattern)是设计模式的一种,属于行为模式。
定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态
的一系列类中,可以把复杂的判断逻辑简化。
意图:
允许一个对象在其内部状态改变时改变它的行为
适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
如图:
举例说明:
- package design.state;
- /**
- * 文件名称:design.state.Step.java
- * 创建人:Fei Wong
- * 创建时间: 2012-06-21
- * 电子邮箱:feiwong8@126.com
- * 说明:枚举,说明有几个状态
- * */
- public enum Step {
- /**
- * 模拟审核的状态, 未审核 审核中 通过审核 未通过审核
- * */
- UNAUDITED , AUDIT , PASS , NOT_PASS
- }
- package design.state;
- /**
- * 文件名称:design.state.Examine.java
- * 创建人:Fei Wong
- * 创建时间: 2012-06-21
- * 电子邮箱:feiwong8@126.com
- * 说明:判断逻辑
- */
- public class Examine {
- private Step step;
- public Examine() {
- step = Step.UNAUDITED ;
- }
- public void push(int status) {
- switch (status) {
- case 1:
- if(step == Step.UNAUDITED){
- step = Step.AUDIT ;
- }else if(step == Step.AUDIT ){
- step = Step.PASS ;
- }else if(step == Step.NOT_PASS){
- System.out.println( "审核已经被否决" );
- }else if(step == Step.PASS){
- System.out.println( "审核已经通过" );
- }
- break ;
- case 0:
- step = Step.NOT_PASS ;
- break ;
- }
- }
- }
- package design.state;
- /**
- * 文件名称:design.state.Main.java
- * 创建人:Fei Wong
- * 创建时间: 2012-06-21
- * 电子邮箱:feiwong8@126.com
- * 说明:测试方法
- * */
- public class Main {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Examine examine = new Examine() ;
- examine.push( 1 ) ;
- examine.push( 0 ) ;
- examine.push( 1 ) ;
- }
- }