模拟传统面向对象语言的装饰者模式-算法分析与设计---micheal t.goodrich roberto tamassia

15.1模拟传统面向对象语言的装饰者模式首先要提出来的是,作为一门解释执行的语言,给JavaScript中的对象动态添加或者改变职责是一件再简单不过的事情,虽然这种做法改动了对象自身,跟传统定义中的装饰者模式并不一样,但这无疑更符合JavaScript的语言特色。代码如下: var obj = { name: 'sven', address: '深圳市' }; obj.address = obj.address + '福田区';传统面向对象语言中的装饰者模式在JavaScript中适用的场景并不多,如上面代码所示,通常我们并不太介意改动对象自身。尽管如此,本节我们还是稍微模拟一下传统面向对象语言中的装饰者模式实现。假设我们在编写一个飞机大战的游戏,随着经验值的增加,我们操作的飞机对象可以升级成更厉害的飞机,一开始这些飞机只能发射普通的子弹,升到第二级时可以发射导弹,升到第三级时可以发射原子弹。下面来看代码实现,首先是原始的飞机类: var Plane = function(){} Plane.prototype.fire = function(){ console.log( '发射普通子弹' ); }接下来增加两个装饰类,分别是导弹和原子弹: var MissileDecorator = function( plane ){ this.plane = plane; } MissileDecorator.prototype.fire = function(){ this.plane.fire(); console.log( '发射导弹' ); } var AtomDecorator = function( plane ){ this.plane = plane; } AtomDecorator.prototype.fire = function(){ this.plane.fire(); console.log( '发射原子弹' ); }图灵社区会员轩辕专享尊重版权
pdf 文件大小:8.11MB