1、模式标准
模式名称:外观模式
模式分类:结构型
模式意图:为一组复杂的子系统提供了一个统一的简单接口。这个统一接口位于所有子系统之上,使用户可以更方便地使用整个系统。
结构图:
适用于:
- 当你想为复杂子系统提供一个简单接口时。外观模式可以定义一个统一的接口,将复杂的子系统调用封装起来,使得客户端只需要调用简单的接口即可完成复杂操作。
- 当客户端和抽象的实现类过于紧密耦合,或者子系统之间的依赖关系复杂难以理解时。通过引入外观类,可以解决这些问题,降低客户端与子系统的耦合,提高系统的可维护性。
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)
}
}
现在可以快速方便的使用各个子系统了,客户端只需要调用简单的接口,就可以直达子系统内的方法。