flex ActionScript 3 0


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 flex
LVCCFSB2005 6 V3 K Flex Damage
flex flex i php
LVCCFSB20066 V3 P Flex Corrosion
Pierwsza aplikacja we Flex
flex Test Driven Development
ABB Flex Theme
flex Flex i Air
LVCCFSB2005 259 V220 Display Flex
flex dostep do?nych z aplikacji
flex Aplikacje wykorzystujce mapy w?obe Flex
K Flex DUCT
Adobe Flex 3 Oficjalny podręcznik
Flex 3 0 Tworzenie efektownych aplikacji
flex Flex Security allowSecureCommunicatio
flex tech x1 instrukcja obslugi

więcej podobnych podstron