“精灵(sprite)”对象设计

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

运用场景:

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

简化后的代码:

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原型链的特性,非常棒的设计模式方法运用。

转载于:https://my.oschina.net/gdxz111/blog/293586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值