行为型--状态模式

标题


当对象的内部状态改变时,使其行为也随着改变。

优点:

  1. 将所有与某个特定状态有关的行为封装到一个类中,并且将属于不同状态的行为分割开。使得对象的行为跟随状态变化而变化。
  2. 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。
  3. 状态对象可以被多个环境对象共享,从而减少系统中对象的个数。

缺点:

  1. 会增加系统类和对象的个数。
  2. 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
  3. 状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

 

举例


public class Client {
	public static void main(String[] args) {
		State state = new State();  
        Context context = new Context(state);  
        //设置第一种状态  
        state.setValue("state1");  
        context.method();  
        //设置第二种状态  
        state.setValue("state2");  
        context.method();
	}
}	
class State{  
    private String value;  
    public String getValue() {  
        return value;  
    }  
    public void setValue(String value) {  
        this.value = value;  
    }  
    //state1时执行
    public void method1(){  
        System.out.println("execute the first opt!");  
    }  
    //state2时执行
    public void method2(){  
        System.out.println("execute the second opt!");  
    }  
}  
class Context {
    private State state;
    public Context(State state) {
        this.state = state;
    }
    public State getState() {
        return state;
    }
    public void setState(State state) {
        this.state = state;
    }
    public void method() {
        System.out.println("状态为:" + state.getValue());
        if (state.getValue().equals("state1")) {
            state.method1();
        } else if (state.getValue().equals("state2")) {
            state.method2();
        }
    }
}

Output:
状态为:state1
execute the first opt!
状态为:state2
execute the second opt!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值