Показать сообщение отдельно
Старый 16.03.2013, 14:56
yasha005 вне форума Посмотреть профиль Отправить личное сообщение для yasha005 Найти все сообщения от yasha005
  № 2  
Ответить с цитированием
yasha005

Регистрация: Dec 2012
Сообщений: 100
Шаблон состояние:
Код:
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( );
		}
	}
}