“精灵(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原型链的特性,非常棒的设计模式方法运用。
看到一份代码,觉得非常漂亮,所以分享在这里,日后可以温故知新:
运用场景:
在游戏开发中,对封装一系列的对象,封装的方法很多。但今天介绍一种基于策略、享元设计模式的对象封装方法,很明显的优点是解耦跟高效利用。
简化后的代码:
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原型链的特性,非常棒的设计模式方法运用。
相关文章推荐
- SpriteBuilder中CCB精灵对象的Sprite frame为什么有时候不能修改
- 游戏中精灵对象的属性功能设计
- Libgdx专题系列:对象篇 Sprite精灵的使用
- 游戏中精灵对象的属性功能设计
- SpriteBuilder中CCB精灵对象的Sprite frame为什么有时候不能修改
- SpriteBuilder中CCB精灵对象的Sprite frame为什么有时候不能修改
- 【Cocos2d-x】Sprite精灵类-创建Sprite精灵对象
- 分布对象设计第一定律~
- 用javascript操作xml-->Web设计中如何使用XML数据源对象(转载)
- 面向对象的设计原则(整理于敏捷开发)
- 面向对象设计的六大原则简介
- 面向对象设计的基本原则
- 面向对象设计原则(4)DIP
- 面向对象的系统分析设计[转载]
- 一些面向对象的设计法则-法则1:优先使用(对象)组合,而非(类)继承
- 面向对象设计的新视角
- 面向对象设计的六大原则简介
- 使用Publish/Subscribe 设计模式达到对象间数据同步(二)
- 面向对象的系统设计中退耦
- 面向对象设计原则