//////////////////////////////////////////////////////////////////////////////// // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to You under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// package mx.core { /** * A deferred instance factory that uses a generator function * to create an instance of the required object. * An application uses the getInstance() method to * create an instance of an object when it is first needed and get * a reference to the object thereafter. * * @see DeferredInstanceFromClass * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class DeferredInstanceFromFunction implements ITransientDeferredInstance { include "../core/Version.as"; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @param generator A function that creates and returns an instance * of the required object. * * @param destructor An optional function used to cleanup outstanding * references when reset() is called. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function DeferredInstanceFromFunction(generator:Function, destructor:Function = null ) { super(); this.generator = generator; this.destructor = destructor; } //-------------------------------------------------------------------------- // // Variables // //-------------------------------------------------------------------------- /** * @private * The generator function. */ private var generator:Function; /** * @private * The generated value. */ private var instance:Object = null; /** * @private * An optional function used to cleanup outstanding * references when reset() is invoked */ private var destructor:Function; //-------------------------------------------------------------------------- // // Methods // //-------------------------------------------------------------------------- /** * Returns a reference to an instance of the desired object. * If no instance of the required object exists, calls the function * specified in this class' generator constructor parameter. * * @return An instance of the object. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public function getInstance():Object { if (!instance) instance = generator(); return instance; } /** * Resets the state of our factory to the initial, uninitialized state. * The reference to our cached instance is cleared. * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 4 */ public function reset():void { instance = null; if (destructor != null) destructor(); } } }