Прокомментировал:

Код AS3:
package
{
import flash.display.Sprite; // импорт класса Sprite
// SpritePool - отрытый финальный(нет возможности наследовать от него) класс SpritePool
public final class SpritePool
{
// приватные статичные переменные класса
private static var MAX_VALUE:uint;
private static var GROWTH_VALUE:uint;
private static var counter:uint;
private static var pool:Vector.<Sprite>;
private static var currentSprite:Sprite;
// открытая статическая функция класса принимает значения maxPoolSize и growthValue
// void - ничего не возвращает
// функция инициализации
public static function initialize( maxPoolSize:uint, growthValue:uint ):void
{
MAX_VALUE = maxPoolSize;
GROWTH_VALUE = growthValue;
counter = maxPoolSize;
var i:uint = maxPoolSize;
pool = new Vector.<Sprite>(MAX_VALUE);// создать пул
// пока --i больше -1 заталкивать в пул спрайты
while( --i > -1 )
pool[i] = new Sprite();
}
// открытая статическая функция getSprite, возвращает спрайты
public static function getSprite():Sprite
{
//если счетчик больше 0 то возвратить текущий спрайт
if ( counter > 0 )
return currentSprite = pool[--counter];
var i:uint = GROWTH_VALUE;
// пока выполняется условие ( --i > -1 ) вставлять в начало pool новый спрайт
while( --i > -1 )
pool.unshift ( new Sprite() );
/*unshift
Метод unshift() вставляет один или более элементов в начало массива, при
этом первый индекс всегда равен 0. */
counter = GROWTH_VALUE;
return getSprite(); // рекурсия
}
// функция disposeSprite принимает disposedSprite типа Sprite
// :void - функция ничего не возвращает
public static function disposeSprite(disposedSprite:Sprite):void
{
pool[counter++] = disposedSprite; // заносится в pool Sprite, увеличивается счетчик на еденицу
}
}
}