看到一份代码,觉得非常漂亮,所以分享在这里,日后可以温故知新:
运用场景:
在游戏开发中,对封装一系列的对象,封装的方法很多。但今天介绍一种基于策略、享元设计模式的对象封装方法,很明显的优点是解耦跟高效利用。
简化后的代码:
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原型链的特性,非常棒的设计模式方法运用。