xxxxxxxxxx
import std;
interface Renderer {
}
void main()
{
Renderer renderer;
auto chip = new Chip();
// Test Draw
// 1. Init
chip.draw(renderer);
// 2. Hovered
chip.to!(Chip.Hovered);
chip.draw(renderer);
// 3. Init
chip.to!(Chip.Init);
chip.draw(renderer);
// 4. Hovered
chip.to!(Chip.Hovered);
chip.draw(renderer);
}
class Chip
{
int state = 7;
interface Behavior {
void draw(Renderer renderer);
}
Behavior behavior;
class Init : Behavior {
void draw(Renderer renderer)
{
writeln("Chip.Init.draw(state=%s)".format(state));
}
}
class Hovered : Behavior {
void draw(Renderer renderer)
{
writeln("Chip.Hovered.draw(state=%s)".format(state));
}
}
this()
{
behavior = new this.Init();
}
void to(NewBehavior)()
{
behavior = new NewBehavior();
}
void draw( Renderer renderer )
{
behavior.draw(renderer);
}
}