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

1、模式标准

模式名称:外观模式

模式分类:结构型

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

结构图:

适用于:

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

2、分析与设计

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

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

3、开始打造

TypeScript 复制代码
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、开始使用

TypeScript 复制代码
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)
  }


}

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

相关推荐
用户938515635073 小时前
工厂模式与 Nest.js 核心思想 —— 从蜜雪冰城到企业级架构
后端·设计模式·nestjs
烬羽7 小时前
从 nest new 到 Hello World:一个最小 NestJS 项目,讲透工厂 + 装饰器 + 模块化
设计模式·node.js·nestjs
艺艺生辉1 天前
从if-else到策略模式
后端·设计模式
小林ixn1 天前
单例模式:从弹窗管理到全局状态,一个模式搞定
前端·javascript·设计模式
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-17-装饰器模式(源码剖析篇)
java·spring·设计模式·装饰器模式·源码分析·io流
workflower1 天前
案例 :某交通厅基于AI技术的智能安全运营实践
网络·人工智能·安全·设计模式·机器人
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-16-装饰器模式(业务实战篇)
java·设计模式·装饰器模式·功能扩展·动态增强
檀越剑指大厂2 天前
哪个远程控制软件低延迟适合玩游戏?2026年8月六款远程工具按游戏类型深度实测
游戏·玩游戏
_ZHOURUI_H_2 天前
Unity TCP底层极限拆解:粘包、半包、CRC、序列号、双缓冲到底怎么一起工作的?
网络·网络协议·tcp/ip·游戏·unity·游戏引擎·游戏开发
言乐62 天前
Python游戏水平测试辅助系统2
开发语言·windows·python·游戏·django