Virtual Proxy with lazy instantiation

by joanllenas
♥0 | Line 45 | Modified 2011-02-16 21:43:17 | MIT License
play

ActionScript3 source code

/**
 * Copyright joanllenas ( http://wonderfl.net/user/joanllenas )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/u04a
 */

package
{
    import flash.text.TextField;
    import flash.display.Sprite;
    
    public class Lazy extends Sprite
    {
        public function Lazy()
        {
            var tf:TextField = new TextField();
            tf.multiline = true;
            tf.width = tf.height = 200;
            addChild( tf );
            
            var foo1:IFoo = new FooProxy("Hello");
            tf.text = foo1.foovar+"\n";
            var foo2:IFoo = new FooProxy("Foo");
            tf.appendText( foo2.foovar+"\n" );
            tf.appendText( foo1.foovar+" "+foo2.foovar+"\n" );
        }
    }
}
interface IFoo{
    function get foovar():String;
}

class Foo implements IFoo{
    private var _foovar:String;
    public function Foo( foovar:String ){
        _foovar = foovar;
    }
    public function get foovar():String{
        return _foovar;
    }
}

class FooProxy implements IFoo{
    private var _foo:Foo;
    private var _foovar:String;
    public function FooProxy( foovar:String ){
        _foovar = foovar;
    }
    //lazy instantiation
    private function getFoo():Foo{
        return _foo || (_foo = new Foo(_foovar));
    }
    public function get foovar():String{
        return getFoo().foovar;
    }
}