主页 > 电脑硬件  > 

23种设计模式-抽象工厂模式

23种设计模式-抽象工厂模式
模式定义

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,提供接口用于创建一组相关或相互依赖的对象家族,而无需指定具体类[2][3][5]。其核心是通过抽象工厂统一管理多个产品族的创建,确保产品之间的兼容性,适用于需要统一风格或约束的场景(如不同品牌的数控系统组件)。


模式结构

抽象产品族(Abstract Product Family):定义产品家族的接口(如数控系统中的运动控制器、传感器)。 具体产品(Concrete Product):实现同一产品族的不同品牌/类型组件(如西门子运动控制器、发那科传感器)。 抽象工厂(Abstract Factory):声明创建整个产品族的方法(如createMotion()和createSensor())。 具体工厂(Concrete Factory):实现抽象工厂接口,生成同一品牌/系列的具体产品[2][3][5]。


C++示例(数控系统场景) #include // 抽象产品1:运动控制器接口 class MotionController { public: virtual void execute() = 0; virtual ~MotionController() = default; }; // 具体产品1A:西门子运动控制器 class SiemensMotion : public MotionController { public: void execute() override { std::cout << "西门子系统:执行五轴联动控制" << std::endl; } }; // 具体产品1B:发那科运动控制器 class FanucMotion : public MotionController { public: void execute() override { std::cout << "发那科系统:执行高速高精度插补" << std::endl; } }; // 抽象产品2:传感器接口 class Sensor { public: virtual void readData() = 0; virtual ~Sensor() = default; }; // 具体产品2A:西门子传感器 class SiemensSensor : public Sensor { public: void readData() override { std::cout << "西门子传感器:采集温度与振动数据" << std::endl; } }; // 具体产品2B:发那科传感器 class FanucSensor : public Sensor { public: void readData() override { std::cout << "发那科传感器:检测刀具磨损状态" << std::endl; } }; // 抽象工厂:支持创建同一品牌的产品族 class CNCFactory { public: virtual MotionController* createMotion() = 0; virtual Sensor* createSensor() = 0; virtual ~CNCFactory() = default; }; // 具体工厂1:西门子产品族工厂 class SiemensFactory : public CNCFactory { public: MotionController* createMotion() override { return new SiemensMotion(); } Sensor* createSensor() override { return new SiemensSensor(); } }; // 具体工厂2:发那科产品族工厂 class FanucFactory : public CNCFactory { public: MotionController* createMotion() override { return new FanucMotion(); } Sensor* createSensor() override { return new FanucSensor(); } }; // 客户端代码 int main() { // 使用西门子工厂创建产品族 CNCFactory* siemensFactory = new SiemensFactory(); MotionController* siemensMotion = siemensFactory->createMotion(); Sensor* siemensSensor = siemensFactory->createSensor(); siemensMotion->execute(); // 输出西门子系统控制逻辑 siemensSensor->readData(); // 输出西门子传感器逻辑 // 使用发那科工厂创建产品族 CNCFactory* fanucFactory = new FanucFactory(); MotionController* fanucMotion = fanucFactory->createMotion(); Sensor* fanucSensor = fanucFactory->createSensor(); fanucMotion->execute(); // 输出发那科系统控制逻辑 fanucSensor->readData(); // 输出发那科传感器逻辑 // 释放资源 delete siemensFactory; delete siemensMotion; delete siemensSensor; delete fanucFactory; delete fanucMotion; delete fanucSensor; return 0; }
模式优势

产品族一致性:确保同一工厂创建的对象相互兼容(如西门子控制器与传感器协同工作)。 解耦与扩展性:新增品牌或产品族时(如海德汉系统),只需扩展工厂和产品类,无需修改客户端代码。 统一接口:客户端仅依赖抽象接口,屏蔽具体实现细节。


适用场景

需要创建多个关联产品的系统(如数控系统的控制器、传感器、驱动器)。 需要约束产品间的兼容性(如不允许混用不同品牌的组件)。

标签:

23种设计模式-抽象工厂模式由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“23种设计模式-抽象工厂模式