我阅读此链接在此处输入链接描述,以了解 State Desing 模式。
接口类:
public interface State {
void doAction();
}
onState 类:
public class TVStartState implements State {
@Override
public void doAction() {
System.out.println("TV is turned ON");
}
}
关闭状态:
public class TVStopState implements State {
@Override
public void doAction() {
System.out.println("TV is turned OFF");
}
}
电视上下文类:
public class TVContext implements State {
private State tvState;
public void setState(State state) {
this.tvState=state;
}
public State getState() {
return this.tvState;
}
@Override
public void doAction() {
this.tvState.doAction();
}
}
测试类:
public static void main(String[] args) {
TVContext context = new TVContext();
State tvStartState = new TVStartState();
State tvStopState = new TVStopState();
context.setState(tvStartState);
context.doAction();
context.setState(tvStopState);
context.doAction();
}
现在我有两个问题:
1- 为什么 TVContext Class implements
State 和有在一起Composition
?是 OO 中的错误吗?因为例如 Cat 继承自 Animal 类和 has_a 动物一起(在这种情况下)。
2-如果此 TestClass 中的最终程序员将上下文传递给 context.setState()
而不是tvStartState或tvStopState,则程序成功编译但在 run_time 中出错。
对于状态设计模式same name method
中的第二个问题,可以使用 继承而不是继承。但 int装饰设计模式不是。