一句话
在一个类的对象中维护状态的类的对象
概括
解析
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());}}