[设计模式-行为型]状态模式(State)

时间:2021-08-14 22:01:37

一句话

在一个类的对象中维护状态的类的对象


概括

[设计模式-行为型]状态模式(State)


解析

STATE—跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说 “有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”,已经喜欢上你的MM就会说“几点钟?看完电影再去泡吧怎么样?”,当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。
  状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。


实例

以产品的开发为例,产品会处于不同的开发阶段, 比如开发、测试。

包含的类文件:

产品类 (Product.java)

一个状态的接口(State.java)

两个状态的类(DevState.java,QAState.java)

测试主类(TestMain.java)

/**    * @author oscar999   
* @date 2015-1-8
* @version V1.0
*/
package designptn.state;

public class Product {

private State state;

public State getState() {
return state;
}

public void setState(State state) {
this.state = state;
}

public String stateMessage() {
return state.getState();
}

}

/**    * @author oscar999    * @date 2015-1-8 * @version V1.0    */package designptn.state;public interface State {String getState();}

/**    * @author oscar999    * @date 2015-1-8 * @version V1.0    */package designptn.state;/** * @author Administrator * */public class DevState implements State {@Overridepublic String getState() {// TODO Auto-generated method stubreturn "Development";}}

/**    * @author oscar999    * @date 2015-1-8 * @version V1.0    */package designptn.state;/** * @author Administrator * */public class QAState implements State {@Overridepublic String getState() {// TODO Auto-generated method stubreturn "Qulity Test";}}

/**    * @author oscar999    * @date 2015-1-8 * @version V1.0    */package designptn.state;/** * @author Administrator *  */public class TestMain {public static void main(String[] args) {// TODO Auto-generated method stubProduct product = new Product();product.setState(new DevState());System.out.println(product.stateMessage());System.out.println("==========================");product = new Product();product.setState(new QAState());System.out.println(product.stateMessage());}}