状态模式

 状态模式很简单,无论是理解,还是实现,都很简单。
一、定义:
1,状态模式允许一个"对象"在其内部状态改变的时候改变其行为。
2,状态模式的角色:
抽象状态,具体状态,环境(context)角色
状态模式的大多数时候是为了解决if--else过多的问题的。当if-else过多时,若重新加入一种状态,会修改原来的代码。而使用状态模式,对原来的代码没有改动,只需添加新增的状态即可。

如下QQ状态例子:

抽象状态State.java

package State;

public abstract class State { 
	//对应状态下的操作
    public abstract void printState();    
}  

 具体状态FirstState.java

package State;

//上线状态
public class FirstState extends State{
   
    public void printState() {   
    	System.out.println("状态是上线"); 
    }   

}

 具体状态SecondState.java

package State;

//隐身状态
public class SecondState extends State{
	
	public void printState() {   
    	System.out.println("状态是隐身");
    }   
	
}

 具体状态:ThirdState.java

package State;

//离线状态
public class ThirdState extends State{
	
	public void printState() {   
    	System.out.println("状态是 离线");
    }   
  
}

 环境Context.java

package State;

public class Context {
	// context的当前状态   
    private State state;   
  
    public Context() {   
    this.state = new FirstState();   
    }   
   
    //设置状态
    public void setState(State state) {   
    this.state = state;   
    }   
  
    //执行对应状态下的操作
    public void execute() {   
    this.state.printState();   
    }   

}

 测试代码:Client.java

package State;

public class Client {
    public Client() {   
        Context context = new Context();   
        context.execute();   
        context.setState(new SecondState());   
        context.execute(); 
        context.setState(new ThirdState()); 
        context.execute();
        }   
      
        public static void main(String[] args) {   
        new Client();   
        } 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值