码迷,mamicode.com
首页 > 其他好文 > 详细

状态模式(State)

时间:2015-09-02 19:26:31      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1、可以通过改变状态来获得不同的行为。2、你的好友能同时看到你的变化。看图:

技术分享

package StateTest;

/**
 * 状态类的核心类
 * @author Administrator
 *
 */
public class State {
	private String value;
	
	public String getValue(){
		return this.value;
	}
	
	public void setValue(String value)
	{
		this.value=value;
	}
	
	public void method1(){
		System.out.println("execute the first opt!");
	}
	
	public void method2(){
		System.out.println("execute the second opt!");
	}
	
	
}


package StateTest;

/**
 * 状态模式切换类
 * @author Administrator
 *
 */
public class Context {

	private State state;
	
	public Context(State state){
		this.state=state;
	}
	
	public State getState(){
		return this.state;
	}
	
	public void setState(String value)
	{
		this.state=state;
	}
	
	public void method(){
		
		if(state.getValue().equals("state1"))
		{
			state.method1();
		}
		if(state.getValue().equals("state2"))
		{
			state.method2();
		}
		
	}
}
package StateTest;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		State state = new State();
		Context context=new Context(state);
		
		//设置第一种状态  
		state.setValue("state1");
		context.method();
		
		//设置第二种状态
		state.setValue("state2");
		context.method();
	}

}

输出:

execute the first opt!
execute the second opt!

根据这个特性,状态模式在日常开发中用的挺多的,尤其是做网站的时候,我们有时希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等。

状态模式(State)

标签:

原文地址:http://my.oschina.net/carbenson/blog/500782

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!