package { import flash.events.EventDispatcher; import mx.controls.Image; [Bindable] public class ResourceManager extends EventDispatcher { private static var instance:ResourceManager; public function ResourceManager() { super(); if (instance) { throw new Error('Singleton Pattern: Use getInstance() class member'); } } public static function getInstance():ResourceManager { if (!instance) { instance =new ResourceManager(); } return instance; } private var assetManager:Array =new Array(); public function isAssetRegistered(assetId:String):Boolean { for each (var o:Object in assetManager) { if (o.assetId == assetId) { return true; } } return false; } /** * keeps a collection of image assets so they do not have to be recreated and poll the server for the same source * the only caveat here is that only 1 parent can host the registered asset since it maintains a single reference * and adding it as a child anywhere else reparents the object. A better method can be created to create a cloned * reference, but I'll leave that up to you. */ public function getRegisteredAsset(assetId:String):Image { for each (var o:Object in assetManager) { if (o.assetId == assetId) { return o.image; } } var n:Object ={assetId:assetId, image:new Image()}; assetManager.push(n); return n.image; } public function flushAssets():void { for each (var o:Object in assetManager) { o.image =null; } assetManager =new Array(); } //public function removeRegisteredAsset(assetId:String):void {} } }