Listing 1. Prosta implementacja wzorca Singleton w jzyku ActionScript
package
{
public class Singleton
{
private static var instance:Singleton;
public function Singleton()
{
// Initialization code
}
public static function getInstance():Singleton
{
if ( !instance )
{
instance = new Singleton();
}
return instance;
}
}
}
Listing 2. Propozycja rozwizania problemu prywatnego konstruktora za pomoc klasy zadeklarowanej poza przestrzeni nazw
package
{
public class Singleton
{
private static var instance:Singleton;
public function Singleton( blocker:SingletonBlocker )
{
if ( blocker == null )
{
throw new Error( "Cannot instantiate Singleton class!" );
}
}
public static function getInstance():Singleton
{
if ( !instance )
{
instance = new Singleton( new SingletonBlocker() );
}
return instance;
}
}
}
class SingletonBlocker
{
}
Listing 3. Przykad implementacji wyliczenia umoliwiajcy wykorzystanie kontroli typu
package{
public class ShapeEnum
{
public function ShapeEnum()
{
public static const TRIANGLE:ShapeEnum = new ShapeEnum();
public static const RECTANGLE:ShapeEnum = new ShapeEnum();
public static const CIRCLE:ShapeEnum = new ShapeEnum();
public function ShapeEnum()
{
}
}
}
}
Listing 4. Przykad wykorzystania przedstawionej implementacji wyliczenia
function drawShape( shape:ShapeEnum ):void
{
switch ( shape )
{
case ShapeEnum.TRIANGLE:
// Draw triangle
break;
case ShapeEnum.RECTANGLE:
// Draw rectangle
break;
case ShapeEnum.CIRCLE:
// Draw circle
break;
}
}
Listing 5. Poprawiona implementacja wyliczenia wykorzystujca statyczny inicjalizator
package
{
public class ShapeEnum
{
public function ShapeEnum()
{
public static const TRIANGLE:ShapeEnum = new ShapeEnum( “Triangle" );
public static const RECTANGLE:ShapeEnum = new ShapeEnum( “Rectangle" );
public static const CIRCLE:ShapeEnum = new ShapeEnum( “Circle" );
private static var locked:Boolean = false;
{
locked = true;
}
private var _name:String;
public function ShapeEnum( name:String )
{
if ( locked )
{
throw new Error( "Cannot instantiate ShapeEnum class!" );
}
_name = name;
}
public override function toString():String
{
return “ShapeEnum." + _name;
}
}
}
}
Listing 6. Przykadowy interfejs produktu metody wytwórczej
interface Ishape
{
function draw():void;
}
Listing 7. Definicje klas implementujcych interfejs produktu metody wytwórczej
// File: Triangle.as
class Triangle implements Ishape
{
public function draw():void
{
// Draw triangle
}
}
// File: Rectangle.as
class Rectangle implements Ishape
{
public function draw():void
{
// Draw rectangle
}
}
// File: Circle.as
class Circle implements Ishape
{
public function draw():void
{
// Draw circle
}
}
Listing 8. Implementacja metody wytwórczej wykorzystujc typ wyliczeniowy
class ShapeCreator
{
public function createShape( type:ShapeEnum ):Ishape
{
switch ( shape )
{
case ShapeEnum.TRIANGLE:
return new Triangle();
break;
case ShapeEnum.RECTANGLE:
return new Rectangle();
break;
case ShapeEnum.CIRCLE:
return new Circle();
break;
default:
throw new Error( “Unknown shape!" );
break;
}
}
}
Listing 9. Rozszerzenie metody wytwórczej o nowy produkt
class AdvancedShapeCreator extends ShapeCreator
{
public function createShape( type:ShapeEnum ):Ishape
{
if ( type == ShapeEnum.STAR )
{
return new Star();
}
else
{
return super.createShape( type );
}
}
}
Wyszukiwarka
Podobne podstrony:
flex pierwsza aplikacja we flexLVCCFSB2005 6 V3 K Flex Damageflex flex i phpLVCCFSB20066 V3 P Flex CorrosionPierwsza aplikacja we Flexflex Test Driven DevelopmentABB Flex Themeflex Flex i AirLVCCFSB2005 259 V220 Display Flexflex dostep do?nych z aplikacjiflex Aplikacje wykorzystujce mapy w?obe FlexK Flex DUCTAdobe Flex 3 Oficjalny podręcznikFlex 3 0 Tworzenie efektownych aplikacjiflex Flex Security allowSecureCommunicatioflex tech x1 instrukcja obslugiwięcej podobnych podstron