您的位置:首页 > 移动开发 > Android开发

设计模式之state模式

2016-05-12 11:23 489 查看
状态模式(State pattern)

允许一个对象在其内部状态改变时改变它的行为。

 适用场景:

  一、一个对象的行为取决于他的状态,并且它必须在运行时根据状态改变它

           的行为;

  二、一个操作中含有庞大的多分支条件语句,并且这些分支依赖于该对象的

           状态。

优缺点:
状态模式的主要优点在于封装了转换规则,其缺点在于使用状态模式会增加系统类和对象的个数,且状态模式的结构与实现都较为复杂.

源码如下:

//1、定义一个抽象状态类

 public interface State {       

         //状态对应的处理   

        public void handle(String sampleParameter);       

    }

//2、一个State类型的对象实例 维护状态的变化

    public class Context {      

        private State state;   

        public void setState(final State state) {  

            this.state = state;  

        }  

         // 用户感兴趣的接口方法

        public void request(final String sampleParameter) {  

            // 转调state来处理  

            state.handle(sampleParameter);  

        } 

   }  

//3、状态变化类

  public class StateA implements State {      

           @Override  

        public void handle(final String sampleParameter) {  

        System.out.println("StateA handle :" + sampleParameter);  

        }

}

//4、状态变化类

    public class StateB implements State {  

                @Override  

        public void handle(final String sampleParameter) {  

            System.out.println("StateA handle :" + sampleParameter);  

        }  

    }   

 //客户端

    public class StateTest {        

        public static void main(final String[] args) {  

 

            final Context context = new Context();  

      

            final State stateA = new StateA();  

            // final State stateB = new StateB();  

            context.setState(stateA);        

            context.request("test");  

        }  

    } 

S t a t e模式提供了一个更好的方法来组织与特定状态相关的代码。决定状态转移的逻辑不在单块的i f或s w i t c h语句中, 而是分布在S t a t e子类之间。将每一个状态转换和动作封装到一个类中,就把着眼点从执行状态提高到整个对象的状态。这将使代码结构化并使其意图更加清晰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息