用23种设计模式打造一个cocos creator的游戏框架----(三)外观模式模式

1、模式标准


模式名称:外观模式

模式分类:结构型

模式意图:为一组复杂的子系统提供了一个统一的简单接口。这个统一接口位于所有子系统之上,使用户可以更方便地使用整个系统。

结构图:

适用于:

  1. 当你想为复杂子系统提供一个简单接口时。外观模式可以定义一个统一的接口,将复杂的子系统调用封装起来,使得客户端只需要调用简单的接口即可完成复杂操作。
  2. 当客户端和抽象的实现类过于紧密耦合,或者子系统之间的依赖关系复杂难以理解时。通过引入外观类,可以解决这些问题,降低客户端与子系统的耦合,提高系统的可维护性。

2、分析与设计

其实就是给我们的游戏框架设计一个主要的入口,比如我设计的游戏框架名叫xhgame(小何游戏),我就以这个xhgame作为这个外观。大部分功能都可以在xhgame这个入口进行完成。

意图:为一组游戏内的子系统提供了一个统一的框架入口xhgame。这个xhgame接口位于所有子系统之上,使用户可以更方便地使用整个系统。

3、开始打造


export class xhgame {
    // 设计模式10(外观模式)
    /** 当前游戏 */
    static get game() {
        return gameInstance.game
    };
    /** 当前游戏用到的enums */
    static get enums() {
        return gameInstance.game.getEnums()
    };
    /** 当前游戏用到的uiid */
    static get uiid() {
        return gameInstance.game.getEnums().UUID
    };
    /** 当前游戏用到的接口 */
    static get api() {
        return gameInstance.game.getEnums().API
    };
    /** 当前游戏用到的prefab */
    static get prefab() {
        return gameInstance.game.getEnums().PREFAB
    };
    /** 当前游戏用到的音效 */
    static get bgm() {
        return gameInstance.game.getEnums().BGM
    };
    /** 当前游戏用到的事件 */
    static get eventType() {
        return gameInstance.game.getEnums().eventType
    };
    /** 当前游戏用到的网络通讯 */
    static get net() {
        return gameInstance.game.getNet()
    };
    /** 当前游戏用到的视图绑定 */
    static get vm() {
        return gameInstance.game.getVM().getVMs()
    }
    /** 单位构建管理(含单位特有属性) */
    static get itemFactory() {
        return gameInstance.game.getItemFactory()
    }
    static get camera() {
        return gameInstance.camera
    }
    static get config() {
        return gameInstance.game.config
    }
    /** 本地存储 */
    static get storage() {
        return gameInstance.storage
    }
    /** 事件 */
    static get eventBus() {
        return gameInstance.eventBus
    }
    /** 游戏时间管理 */
    static get timer() {
        return gameInstance.timer
    }
    /** nodes管理 */
    static nodes: NodesManager = null;
    /** ui界面管理 */
    static gui: GuiManager = null;
    /** 游戏音乐管理 */
    static audio: AudioManager = null;
}

4、开始使用


export class DemoGame {

  start(){
        xhgame.net.post(url)
        xhgame.timer.start()
        xhgame.storage.set('token','abc')
        xhgame.game.playerEntity.joinRoom()
        await xhgame.gui.openUIAsync(xhgame.uiid.Battle_Index)
  }


}

现在可以快速方便的使用各个子系统了,客户端只需要调用简单的接口,就可以直达子系统内的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值