DFdou's Blog Life is short,Be yourself.

1405/090

AAS3WDP-Chapter 6 Virtual Proxy 虚拟代理模式

按照习惯应该先鬼扯下什么是Virtual Proxy,……话说…还是直接参阅Java设计模式的Virtual Proxy吧,或者看看这个吧:"Java设计模式之虚拟代理模式"
Flash里边的Loader就是一个代理,书上的说法是这样的,本来一个元件是必须等到加载完成才能加载到显示列表中的,但是用了虚拟代理之后,可以将代理当成一个加载完成后的元件,加入到显示列表中。
下边么,来点代码,先是接口类IProduct.as:

package{
	public interface IProduct{
		//get method
		function getPrice():Number;
		function getTitle():String;
		//set method
		function setPrice(price:Number):void;
		function setTitle(title:String):void;
	}
}


实现该接口的类Product.as:

package{
	import IProduct;
	public class Product implements IProduct{
		private var _price:Number;
		private var _title:String;
		public function Product():void{}
		//get method
		public function getPrice():Number{
			return _price;
		}
		public function getTitle():String{
			return _title;
		}
		//set method
		public function setPrice(price:Number):void{
			_price=price;
		}
		public function setTitle(title:String):void{
			_title=title;
		}
	}
}

接着,是代理类XMLProductProxy.as

package{
	import IProduct;
	import Product;
	public class XMLProductProxy implements IProduct{
		private var _data:XML;
		private var _product:Product;
		public function XMLProductProxy(data:XML){
			_data=data;
			_product=new Product();
		}
		//get method
		public function getPrice():Number{
			if(isNaN(_product.getPrice())){
				_product.setPrice(Number(_data.price.toString()));
			}
			return _product.getPrice();
		}
		public function getTitle():String{
			if(_product.getTitle()==null){
				_product.setTitle(_data.title.toString());
			}
			return _product.getTitle();
		}
		//set method
		public function setPrice(price:Number):void{
			_data.price=price;
			_product.setPrice(price);
		}
		public function setTitle(title:String):void{
			_data.title=title;
			_product.setTitle(title);
		}
	}
}

XMLProductProxy类实现IProduct接口,但是呢又通过另一个具体实现类Product,使用组合来继承Product类所有的方法。
接着就是代理的使用了:
Fla Source:

import XMLProductProxy;
import IProduct;
var data:XML=<product><title>我是标题</title><price>18.75</price></product>;
var product:IProduct=new XMLProductProxy(data);
trace(product.getTitle()+"---$"+product.getPrice());
//output 我是标题---$18.75

Some Related Posts

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

:zhuang :xizao :wuwu :wenhao :wc :touxiang :shuaya :shuajian :shengtian :paopao :no :meinv :maonv :loveu :leilei :kua :jrjr :dahan :chi :chaocai :byebye


CommentLuv Enabled

No trackbacks yet.