封装对象的状态以及对应的行为。
一种对if-else的重构手法。
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
FeelingState sad = new SadState();
FeelingState happy = new HappyState();
Person p = new Person();
System.out.println("==== 难过状态 ==== ");
p.setState(sad); // 难过
p.eat();
p.sleep();
System.out.println("\n==== 开心状态 ==== ");
p.setState(happy); // 开心
p.eat();
p.sleep();
}
}
class Person {
// 对象的状态
private FeelingState state;
// 对象的状态发生改变
public void setState(FeelingState state) {
this.state = state;
}
public void eat() {
state.eat(); // 状态发生变化时,对象的行为也会发生变化
}
public void sleep() {
state.sleep();
}
}
// 通过继承体系封装了对象的状态以及不同状态下的行为 (每种状态及该状态下的行为,通过不同的子类去实现)
interface FeelingState {
void eat();
void sleep();
}
class SadState implements FeelingState {
public void eat() {
System.out.println("eat(): 不想吃饭!!!");
}
public void sleep() {
System.out.println("sleep(): 不想睡觉!!!");
}
}
class HappyState implements FeelingState {
public void eat() {
System.out.println("eat(): 饭好香啊~~~");
}
public void sleep() {
System.out.println("sleep(): 做个美梦~~~");
}
}
运行结果:
==== 难过状态 ====
不想吃饭!!!
不想睡觉!!!
==== 开心状态 ====
饭好香啊~~~
做个美梦~~~