网站建设作业教程,东莞网站建设制作价格,建设公司网站的可行性研究,wordpress自定义结构运行在VS2022#xff0c;x86#xff0c;Debug下。
30. 外观模式 为子系统定义一组统一的接口#xff0c;这个高级接口会让子系统更容易被使用。应用#xff1a;如在游戏开发中#xff0c;游戏引擎包含多个子系统#xff0c;如物理、渲染、粒子、UI、音频等。可以使用外观…运行在VS2022x86Debug下。
30. 外观模式 为子系统定义一组统一的接口这个高级接口会让子系统更容易被使用。应用如在游戏开发中游戏引擎包含多个子系统如物理、渲染、粒子、UI、音频等。可以使用外观模式来封装这些复杂的子系统提供一个简单的接口给游戏开发者从而无需直接操作复杂的子系统简化了开发流程。实现 子系统。外观提供统一的接口。客户端。 代码如下。 游戏引擎外观GameEngineFacade类使用单例模式确保在整个游戏中只有一个外观实例从而统一管理子系统资源。
// 物理引擎子系统
class PhysicsSystem
{
public:void init() { cout Initializing physics engine... endl;}void update() { cout Updating physics... endl; }
};//渲染子系统
class GraphicsSystem
{
public:void init() { cout Initializing graphics... endl; }void render() { cout Rendering graphics... endl;}
};//粒子子系统
class ParticleSystem
{
public:void init() { cout Initializing particle... endl; }void createParticle() { cout Creating particle... endl; }
};//游戏引擎外观
class GameEngineFacade
{
private:PhysicsSystem* physics;GraphicsSystem* graphics;ParticleSystem* particle;GameEngineFacade() //私有构造函数{physics new PhysicsSystem();graphics new GraphicsSystem();particle new ParticleSystem();}~GameEngineFacade() //私有析构函数{if (physics){delete physics;physics nullptr;}if (graphics){delete graphics;graphics nullptr;}if (particle){delete particle;particle nullptr;}}GameEngineFacade(const GameEngineFacade) delete; //删除拷贝构造函数GameEngineFacade operator(const GameEngineFacade) delete; //删除赋值运算符GameEngineFacade(GameEngineFacade) delete; //删除移动构造函数GameEngineFacade operator(GameEngineFacade) delete; //删除移动赋值运算符public:static GameEngineFacade* getInstance() //静态函数获取实例{static GameEngineFacade instance; //局部静态变量存储实例return instance;}void initGame() {graphics-init();physics-init();particle-init();}void updateGame() {physics-update();particle-createParticle();}void renderGame() {graphics-render();}
};int main()
{GameEngineFacade* gameEngine GameEngineFacade::getInstance();gameEngine-initGame();gameEngine-updateGame();
}反汇编分析子系统资源创建到释放过程
第一次调用getInstance() 获取外观实例时_Init_thread_header()和_Init_thread_footer()是多线程同步函数确保局部静态变量初始化是线程安全的。GameEngineFacade()构造函数来创建实例_atexit()注册实例的析构函数。如下图。 执行完构造函数创建了三个子系统如下图。 main()返回如下图。 _exit()执行析构函数或atexit注册的函数指针最后结束程序如下图。 执行atexit注册的外观实例的析构函数将三个子系统资源释放。