65 lines
1.3 KiB
Dart
65 lines
1.3 KiB
Dart
|
/**
|
|||
|
状态模式(State Pattern)
|
|||
|
|
|||
|
意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
|
|||
|
主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。
|
|||
|
何时使用:代码中包含大量与对象状态有关的条件语句。
|
|||
|
如何解决:将各种具体的状态类抽象出来。
|
|||
|
*/
|
|||
|
main(List<String> args) {
|
|||
|
Context context = Context();
|
|||
|
|
|||
|
StartState startState = StartState();
|
|||
|
startState.doAction(context);
|
|||
|
print(context.state);
|
|||
|
|
|||
|
StopState stopState = new StopState();
|
|||
|
stopState.doAction(context);
|
|||
|
print(context.state);
|
|||
|
}
|
|||
|
|
|||
|
//////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
///
|
|||
|
/// 创建一个接口
|
|||
|
///
|
|||
|
abstract class State {
|
|||
|
void doAction(Context context);
|
|||
|
}
|
|||
|
|
|||
|
///
|
|||
|
/// 创建 Context 类
|
|||
|
///
|
|||
|
class Context {
|
|||
|
State state = null;
|
|||
|
|
|||
|
Context();
|
|||
|
}
|
|||
|
|
|||
|
///
|
|||
|
/// 创建实现接口的实体类
|
|||
|
///
|
|||
|
class StartState implements State {
|
|||
|
void doAction(Context context) {
|
|||
|
print("Player is in start state");
|
|||
|
context.state = this;
|
|||
|
}
|
|||
|
|
|||
|
@override
|
|||
|
String toString() {
|
|||
|
return "Start State";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
class StopState implements State {
|
|||
|
void doAction(Context context) {
|
|||
|
print("Player is in stop state");
|
|||
|
context.state = this;
|
|||
|
}
|
|||
|
|
|||
|
@override
|
|||
|
String toString() {
|
|||
|
return "Stop State";
|
|||
|
}
|
|||
|
}
|