【发布时间】:2019-05-28 10:05:24
【问题描述】:
我读了这个链接enter link description here, 学习状态设计模式。
接口类:
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");
}
}
TvContext 类:
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 类 implements 状态和 Composition 在一起?
是 OO 中的错误吗?
因为例如 Cat 继承自 Animal 类和 has_a 动物一起(在这种情况下)。
2-如果这个TestClass中的最终程序员将context传递给context.setState()而不是tvStartState或tvStopState,程序编译成功但报错在运行时。
状态设计模式中的第二个问题,可以用same name method代替继承。但 int 装饰设计模式不是。
【问题讨论】:
-
错误
Program successfully compiles but error in run_time.是什么?可以发在这里吗? -
请不要包含文字的图片。如果您有错误堆栈跟踪,请使用
{}按钮将其复制并粘贴到您的问题和格式中。
标签: java oop design-patterns implements object-composition