运行在VS2022,x86,Debug下。
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..." <
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(); } 反汇编分析,子系统资源创建到释放过程
- 游戏引擎外观(GameEngineFacade类)使用单例模式,确保在整个游戏中只有一个外观实例,从而统一管理子系统资源。
还没有评论,来说两句吧...