设计模式之state模式

状态模式(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子类之间。将每一个状态转换和动作封装到一个类中,就把着眼点从执行状态提高到整个对象的状态。这将使代码结构化并使其意图更加清晰。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值