Шаблон состояние:

Код:
1. Контекстный класс
VideoWorks.as
2. Классы контекста состояния
StopState.as - проигрывание остановлено
PlayState.as - состояние проигрывания
3. Интерфейс состояния
State.as
4. Клиент
TestState.as

Код AS3:
package
{
//Context class
// Контекстный класс
class VideoWorks
{
var playState:State;
var stopState:State;
// Переменная для хранения текущего состояния
var state:State;
public function VideoWorks()
{
trace("Video Player is On");
playState = new PlayState(this);
stopState = new StopState(this);
state = stopState;
}
public function startPlay():void
{
state.startPlay();
}
public function stopPlay():void
{
state.stopPlay();
}
// Методы получатели и установщики
public function setState(state:State):void
{
trace("A new state is set");
this.state = state;
}
public function getState():State
{
return state;
}
public function getPlayState():State
{
return this.playState;
}
public function getStopState():State
{
return this.stopState;
}
}
}

Код AS3:
package
{
//Stop State;
// Класс контекстного состояния: проигрывание остановлено
class StopState implements State
{
// Доступ к методам установщикам и получателям для каждого состояния
var videoWorks:VideoWorks;
public function StopState(videoWorks:VideoWorks)
{
trace("--Stop State--");
this.videoWorks = videoWorks;
}
public function startPlay():void
{
trace("Begin playing");
videoWorks.setState(videoWorks.getPlayState());
}
public function stopPlay():void
{
trace("You're already stopped");
}
}
}

Код AS3:
package
{
//Play State
// Класс контекстного состояния: состояние проигрывания
class PlayState implements State
{
var videoWorks:VideoWorks;
public function PlayState(videoWorks:VideoWorks)
{
trace("--Play State--");
this.videoWorks = videoWorks;
}
public function startPlay():void
{
trace("You're already playing");
}
public function stopPlay():void
{
trace("Stop playing.");
videoWorks.setState(videoWorks.getStopState());
}
}
}

Код AS3:
package
{
//State Machine Interface
// Интерфейс автомата состояний
interface State
{
function startPlay():void;
function stopPlay():void;
}
}

Код AS3:
package
{
//Test states
// Тестируем состояния
import flash.display.Sprite;
public class TestState extends Sprite
{
public function TestState( ):void
{
var test:VideoWorks = new VideoWorks( );
test.startPlay( );
test.startPlay( );
test.stopPlay( );
test.stopPlay( );
}
}
}