`
liulanghan110
  • 浏览: 1076045 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

状态模式

阅读更多

 状态模式很简单,无论是理解,还是实现,都很简单。
一、定义:
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();   
        } 
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics