不同状态有不同的行为
适用场合:控制一个对象状态转换的条件表达式过于复杂时
State.java
package com.gary.designpattern.state;
/**
* 抽象状态
* @author gary
*
*/
public abstract class State {
public abstract void greeting(Greeting g);
}
MorningState.java
package com.gary.designpattern.state;
/**
* 早上状态
* @author gary
*
*/
public class MorningState extends State {
@Override
public void greeting(Greeting g) {
if(g.getHour() <= 12){
System.out.println("good morning!");
}else{
//超过12点转入下午状态
g.setState(new AfternoonState());
g.greeting();
}
}
}
AfternoonState.java
package com.gary.designpattern.state;
/**
* 下午状态
* @author gary
*
*/
public class AfternoonState extends State {
@Override
public void greeting(Greeting g) {
if(g.getHour() <= 18){
System.out.println("good afternoon!");
}else{
//超过18点转入晚上状态
g.setState(new EveningState());
g.greeting();
}
}
}
EveningState.java
package com.gary.designpattern.state;
/**
* 晚上状态
* @author gary
*
*/
public class EveningState extends State {
@Override
public void greeting(Greeting g) {
System.out.println("good evening!");
}
}
Greeting.java
package com.gary.designpattern.state;
public class Greeting{
//状态
private State state;
//小时
private double hour = 0;
public Greeting(){
//初始状态
setState(new MorningState());
}
public void setHour(double hour) {
this.hour = hour;
}
public double getHour() {
return hour;
}
public void setState(State state) {
this.state = state;
}
public State getState() {
return state;
}
public void greeting(){
getState().greeting(this);
}
}
Test.java
package com.gary.designpattern.state;
/**
* 测试
* @author gary
*
*/
public class Test {
public static void main(String[] args) {
Greeting g = new Greeting();
g.setHour(9);
g.greeting();
g.setHour(13);
g.greeting();
g.setHour(20);
g.greeting();
}
}