您的位置:首页 > 其它

“精灵(sprite)”对象设计

2014-07-21 00:00 369 查看
摘要: 策略模式和享元模式

看到一份代码,觉得非常漂亮,所以分享在这里,日后可以温故知新:

运用场景:

在游戏开发中,对封装一系列的对象,封装的方法很多。但今天介绍一种基于策略、享元设计模式的对象封装方法,很明显的优点是解耦跟高效利用。

简化后的代码:

var Sprite=function(name,painter){
if(name!==undefined){
this.name=name;
}
if(painter!==undefined){
this.painter=painter;
}
return this; //返回一对象作用域
}

//定义Sprite对象原型链上的方法painting
Sprite.prototype={
painting:function(){
if(this.painter!==undefined){
this.painter.paint(this);
}
}
}

//定义一种绘图算法SpritePainter
var SpritePainter=function(){}

SpritePainter.prototype={
paint:function(sprite){

//绘图算法..........
console.log(sprite);
}
}

var sprite=new Sprite("runner",new SpritePainter());

sprite.painting();

这里主要有两个对象定义,一个是Sprite,一个是SpritePainter。Sprite是基本对象的信息,SpritePainter是Sprite的绘制图形算法。这里把对象跟绘制的对象解耦出来,两者对立了处理。这样就可以随意更改绘制算法,而Sprite却可以作为原件一直重用。解耦也就是策略设计模式,而重用也就是享元模式。两者的结合很好的完成对象定义,而又保证解耦以及重用。

充分利用了JS原型链的特性,非常棒的设计模式方法运用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息