一,状态模式允许对象在其内部状态改变的时候改变行为,使其看上去就像是改变了他的类一样。
状态模式中的每一个状态可以改变自己内部状态
以心情的状态改变为事例:
package com.wqy.State;
/**
* @author wu_quanyin(09817)
* @version 1.0
* @date 2010-7-16 下午05:57:02
*/
public interface MoodState {
//当前心情
public void currentFeeling();
//改变状态
public void covertMoodState();
}
package com.wqy.State;
/**
* @author wu_quanyin(09817)
* @version 1.0
* @date 2010-7-16 下午05:59:11
*/
public class HappyState implements MoodState {
private Person person;
public HappyState(Person person){
this.person=person;
}
@Override
public void currentFeeling() {
System.out.println("I'm very happy...");
covertMoodState();
}
public void covertMoodState(){
person.setState(new AngryState(person));
}
}
package com.wqy.State;
/**
* @author wu_quanyin(09817)
* @version 1.0
* @date 2010-7-16 下午05:58:11
*/
public class AngryState implements MoodState {
private Person person;
public AngryState(Person person){
this.person=person;
}
public void currentFeeling() {
System.out.println("I'm very angry...");
covertMoodState();
}
public void covertMoodState(){
person.setState(new SadState(person));
}
}
package com.wqy.State;
/**
* @author wu_quanyin(09817)
* @version 1.0
* @date 2010-7-16 下午06:00:09
*/
public class SadState implements MoodState {
private Person person;
public SadState(Person person){
this.person=person;
}
@Override
public void currentFeeling() {
System.out.println("I'm very sadly...");
covertMoodState();
}
public void covertMoodState(){
person.setState(new HappyState(person));
}
}
package com.wqy.State;
/**
* @author wu_quanyin(09817)
* @version 1.0
* @date 2010-7-16 下午06:02:24
*/
public class Person {
private MoodState moodState;
public Person(){
moodState=new HappyState(this);
}
public void setState(MoodState moodState){
this.moodState=moodState;
}
public void currentFeeling(){
moodState.currentFeeling();
}
}
package com.wqy.State;
/**
* @author wu_quanyin(09817)
* @version 1.0
* @date 2010-7-16 下午06:01:36
*/
public class Client {
public static void main(String[] args) {
Person person=new Person();
for(int i=0;i<4;i++){
person.currentFeeling();
}
}
}
打印结果:
I'm very happy...
I'm very angry...
I'm very sadly...
I'm very happy...
使用: