Skip to content

Instantly share code, notes, and snippets.

@basvanmeurs
Last active February 5, 2019 16:40
Show Gist options
  • Save basvanmeurs/0f5a0a4d62cb2caa5ebd91cd54bf9407 to your computer and use it in GitHub Desktop.
Save basvanmeurs/0f5a0a4d62cb2caa5ebd91cd54bf9407 to your computer and use it in GitHub Desktop.
State Subclassing example
export default class Account extends StateMachine {
constructor() {
this._balance = 0;
}
$enter() {
this.open();
}
open() {
this._setState("Open");
}
close() {
this._setState("Closed");
}
getAvailable() {
return this._balance;
}
static _states() {
return [
class Open extends this {
deposit(amount) {
this._balance += amount;
}
withdraw(amount) {
this._balance -= amount;
}
placeHold() {
this._setState("Open.Held");
}
static _states() {
return [
class Held extends this {
deposit(amount) {
// Not allowed when held.
}
withdraw() {
// Not allowed when held.
}
getAvailable() {
return 0;
}
releaseHold() {
this._setState("Open");
}
}
]
}
},
class Closed extends this {
deposit(amount) {
}
getAvailable() {
return 0;
}
}
];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment