《设计模式》 - 7. 组合模式( Composite )

组合模式 ( Composite ) :

语言 : JavaScript

说明 :

以一个游戏角色为例 , 人物角色的技能表为 主菜单 (skillMenu) , 主菜单 包含 冰系技能菜单 ( iceSkillMenu ) 和 火系技能菜单 ( fireSkillMenu ) , 菜单里面分别还有对应属性技能 .

适用情况 :

像上面举例的这种情况 , 技能表 和 属性技能 , 还有单个技能之间层次关系分明 , 就可以使用组合模式 .

作用 :

使得代码结构清晰 , 层次分明 , 便于修改 .

组件模式结构 :

这里写图片描述

组件类 ( Component ) :

组件类是组件模式的核心部分 , 以技能菜单为例 , 技能需要继承组件类 , 子系技能菜单需要继承组件类 , 主菜单也要继承 , 他们具有共同的方法和属性 .


var Component = cc.Class.extend({
    children: null,
    name: null,

    ctor: function(name){
        this.name = name;
        this.children = new Object();
    },

    add: function(child){
        this.children[child.getName()] = child;
    },

    remove: function(child){
        delete this.children[child.getName()];
    },

    getName: function(){
        return this.name;
    },

    show: function(){
        for(var index in this.children)
        {
            console.log(this.children[index].getName());
            this.children[index].show();
        }
    }

});

客户类 ( Client ) :


var iceSkillMenu = new Component("冰系技能");
var iceArrow = new Component("技能 - 寒冰箭");
var iceRain = new Component("技能 - 暴风雨");

iceSkillMenu.add(iceArrow);
iceSkillMenu.add(iceRain);

var fireSkillMenu = new Component("火系技能");
var fireBall = new Component("技能 - 火球术");
var fireWall = new Component("技能 - 火墙");

fireSkillMenu.add(fireBall);
fireSkillMenu.add(fireWall);

var skillMenu = new Component("技能菜单");

skillMenu.add(iceSkillMenu);
skillMenu.add(fireSkillMenu);

skillMenu.show();    // 显示技能菜单

结果显示 :

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值