记录一下状态模式的一个小例子
class AlterStatus {
public void showStatus() {
System.out.println("None");
}
}
class RedAlterStatus extends AlterStatus {
@Override
public void showStatus() {
System.out.println("Red");
}
}
class YellowAlterStatus extends AlterStatus {
@Override
public void showStatus() {
System.out.println("Yellow");
}
}
class GreenAlterStatus extends AlterStatus {
@Override
public void showStatus() {
System.out.println("Green");
}
}
class Starship {
private AlterStatus as = new RedAlterStatus();
public void changeStatus(AlterStatus as) {
this.as = as;
}
public void showStatus() {
as.showStatus();
}
}
public class Test {
public static void main(String[] args) {
Starship s = new Starship();
s.showStatus();
s.changeStatus(new GreenAlterStatus());
s.showStatus();
s.changeStatus(new YellowAlterStatus());
s.showStatus();
}
}
输出结果是
Starship对象包含了对AlterStatus的引用,AlterStatus被初始化成RedAlterStatus对象,在调用他的showStatus方法时,会产生于RedAlterStatus对象对应的行为.
而引用可以在运行时,根据传入对象的不同,绑定不一样的对象.这样调用showStatus方法,产生的行为也就发生了变化.为我们使用带来了灵活性.