//////////////////////////////////////////////////////////////////////////////// // // 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 ClassFactory instance is a "factory object" which Flex uses * to generate instances of another class, each with identical properties. * *
You specify a generator
class when you construct
* the factory object.
* Then you set the properties
property on the factory object.
* Flex uses the factory object to generate instances by calling
* the factory object's newInstance()
method.
The newInstance()
method creates a new instance
* of the generator
class, and sets the properties specified
* by properties
in the new instance.
* If you need to further customize the generated instances,
* you can override the newInstance()
method.
The ClassFactory class implements the IFactory interface.
* Therefore it lets you create objects that can be assigned to properties
* of type IFactory, such as the itemRenderer
property of a List control
* or the itemEditor
property of a DataGrid control.
For example, suppose you write an item renderer class named
* ProductRenderer containing
* a showProductImage
property which can be true
* or false
.
* If you want to make a List control use this renderer, and have each renderer
* instance display a product image, you would write the following code:
* var productRenderer:ClassFactory = new ClassFactory(ProductRenderer); * productRenderer.properties = { showProductImage: true }; * myList.itemRenderer = productRenderer;* *
The List control calls the newInstance()
method on the
* itemRenderer
to create individual instances of ProductRenderer,
* each with showProductImage
property set to true
.
* If you want a different List control to omit the product images, you use
* the ProductRenderer class to create another ClassFactory
* with the properties
property set to
* { showProductImage: false }
.
Using the properties
property to configure the instances
* can be powerful, since it allows a single generator class to be used
* in different ways.
* However, it is very common to create non-configurable generator classes
* which require no properties to be set.
* For this reason, MXML lets you use the following syntax:
* <mx:List id="myList" itemRenderer="ProductRenderer">* *
The MXML compiler automatically creates the ClassFactory instance * for you.
* * @see mx.core.IFactory * @see mx.controls.List * * @langversion 3.0 * @playerversion Flash 9 * @playerversion AIR 1.1 * @productversion Flex 3 */ public class ClassFactory implements IFactory { include "../core/Version.as"; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- /** * Constructor. * * @param generator The Class that thenewInstance()
method uses
* to generate objects from this factory object.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public function ClassFactory(generator:Class = null)
{
super();
this.generator = generator;
}
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// generator
//----------------------------------
/**
* The Class that the newInstance()
method uses
* to generate objects from this factory object.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public var generator:Class;
//----------------------------------
// properties
//----------------------------------
/**
* An Object whose name/value pairs specify the properties to be set
* on each object generated by the newInstance()
method.
*
* For example, if you set properties
to
* { text: "Hello", width: 100 }
, then every instance
* of the generator
class that is generated by calling
* newInstance()
will have its text
set to
* "Hello"
and its width
set to
* 100
.
generator
class,
* with the properties specified by properties
.
*
* This method implements the newInstance()
method
* of the IFactory interface.