用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)
  }


}

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

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 02:52:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 02:52:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 02:52:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 02:52:03       20 阅读

热门阅读

  1. Android 横竖屏切换 窗口全屏

    2023-12-08 02:52:03       40 阅读
  2. [LeetCode] 12. 整数转罗马数字

    2023-12-08 02:52:03       27 阅读
  3. C#中的Lambda表达式

    2023-12-08 02:52:03       36 阅读
  4. Kubernetes实战(七)-反向提取镜像Dockerfile

    2023-12-08 02:52:03       25 阅读
  5. 12.07

    12.07

    2023-12-08 02:52:03      36 阅读
  6. 基于selenium工具刷b站播放量(请谨慎使用)

    2023-12-08 02:52:03       22 阅读
  7. TCP网络常见名词

    2023-12-08 02:52:03       32 阅读