23种设计模式 -【工厂方法】

发布时间:2026/6/12 1:59:13

23种设计模式 -【工厂方法】 工厂方法模式Factory Method Pattern核心思想工厂方法模式是一种创建型设计模式其核心思想为将对象的创建延迟到子类而非在代码中直接使用new关键字。简洁定义定义一个创建对象的接口由子类决定实例化具体类。一、应用背景与问题传统实现方式classEnemy{public:virtualvoidAttack()0;};classZombie:publicEnemy{public:voidAttack()override{std::coutZombie attackstd::endl;}};classAlien:publicEnemy{public:voidAttack()override{std::coutAlien attackstd::endl;}};直接使用Enemy*enemynewZombie();// 直接newenemy-Attack();存在的问题可扩展性差若新增产品如class Robot : public Enemy需修改所有直接创建对象的代码可能导致大量条件判断代码违反开闭原则对扩展开放对修改关闭创建逻辑与业务逻辑耦合复杂的创建过程如加载模型、初始化AI、设置属性等会与业务逻辑混杂解决方案将对象创建职责分离到专门的工厂类实现创建与使用的解耦。二、模式结构Creator工厂基类 | ------------------- | | ConcreteFactory ConcreteFactory ↓ 创建 Product产品基类 | ------------------- | | ConcreteProduct ConcreteProduct1. Product产品接口定义产品的抽象接口classEnemy{public:virtualvoidAttack()0;};2. ConcreteProduct具体产品实现具体产品类classZombie:publicEnemy{public:voidAttack()override{std::coutZombie attackstd::endl;}};classAlien:publicEnemy{public:voidAttack()override{std::coutAlien attackstd::endl;}};3. Creator工厂基类定义创建对象的接口classEnemyFactory{public:virtualEnemy*CreateEnemy()0;};核心特点仅定义接口不创建具体对象。4. ConcreteCreator具体工厂实现具体的对象创建逻辑classZombieFactory:publicEnemyFactory{public:Enemy*CreateEnemy()override{returnnewZombie();}};classAlienFactory:publicEnemyFactory{public:Enemy*CreateEnemy()override{returnnewAlien();}};核心特点负责具体对象的实例化。三、使用方式EnemyFactory*factorynewZombieFactory();Enemy*enemyfactory-CreateEnemy();enemy-Attack();关键变化传统方式Enemy* enemy new Zombie();工厂方法Enemy* enemy factory-CreateEnemy();优势业务代码仅依赖抽象接口Enemy和EnemyFactory而非具体实现类Zombie、Alien等实现了解耦。四、核心价值工厂方法模式本质上解决了对象创建责任的归属问题责任主体由子类负责创建对象而非业务代码设计思想业务代码只需使用对象无需关心创建细节体现依赖反转原则五、与简单工厂模式的区别简单工厂模式classEnemyFactory{public:staticEnemy*CreateEnemy(string type){if(typezombie)returnnewZombie();if(typealien)returnnewAlien();}};特点单个工厂类负责所有产品的创建问题新增产品需修改工厂方法违反开闭原则工厂方法模式特点每个产品对应一个工厂类如Zombie → ZombieFactory优势新增产品只需添加新的产品类和工厂类无需修改原有代码符合开闭原则一句话总结区别简单工厂一个工厂生产所有产品工厂方法每个产品对应一个工厂六、适用场景代码中存在大量直接new操作条件判断逻辑复杂且频繁变更插件式架构如仿真框架中的RadarModelFactory、WeaponFactory等框架中的应用staticWsfEM_Propagation*ObjectFactory(conststd::stringaTypeName);此类实现通常采用工厂方法 注册表模式是工业级代码的常见写法。七、设计思想简单工厂将对象创建集中管理工厂方法将对象创建责任下放给子类核心原则通过工厂接口获取对象而非直接依赖具体实现这种设计体现了面向对象的设计思维通过抽象和多态实现系统的灵活性和可扩展性。

相关新闻