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


}

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

相关推荐
johnsong1 天前
Claude Fable 5.2 登顶:65 分、单发做游戏,和一份 $26.54 一单的账单
人工智能·游戏
cjz38991 天前
规则树:把一百行if-else拆成一棵树
设计模式
Adellle1 天前
设计模式指南 (Java 版) ㊁
java·开发语言·设计模式
是2的10次方啊1 天前
设计模式与生活⑱:工资还没焐热,账单已经凑成一摞
设计模式
百思不得小李2 天前
一个复杂的动态表单是如何实现的
前端·设计模式
爱你真是太好了2 天前
上下文组成以及如何压缩
设计模式
freejackman2 天前
【工程化】从“单兵作战”到“多引擎架构”:基于门面模式的重构实战
大数据·数据库·hive·sql·测试工具·设计模式·架构
Java成神之路-2 天前
从 if-else 到优雅解耦:策略 / 适配器 / 组合模式全流程实战
设计模式
shadowcz0072 天前
屿北:站在新旧时代交接处,赌一场AI原生无限游戏#Infinite Talk
游戏·ai-native
是2的10次方啊3 天前
设计模式与生活⑰:空腹体检,单子领着人走
设计模式