2021-02-05 22:28:59
C++中的工厂模式是一种创建型设计模式,通过封装对象创建过程,将对象的创建逻辑与使用逻辑解耦,提升代码的灵活性和可维护性。 它分为简单工厂、工厂方法和抽象工厂三种形式,核心思想是避免直接使用new操作符实例化对象,而是通过工厂类或接口动态生成对象。
一、工厂模式的三种形式简单工厂模式
核心:通过一个工厂类集中创建所有对象。
实现:工厂类根据输入参数(如字符串、枚举值)返回不同子类的实例。
优点:客户端无需直接依赖具体类,只需与工厂交互。
缺点:工厂类职责过重,新增产品时需修改工厂代码,违反开闭原则。
示例:class AnimalFactory {public: static Animal* createAnimal(const std::string& type) { if (type == "dog") return new Dog(); else if (type == "cat") return new Cat(); return nullptr; }};
工厂方法模式
核心:定义创建对象的接口,将实例化逻辑延迟到子类。
实现:父类提供抽象工厂方法,子类实现具体创建逻辑。
优点:符合开闭原则,新增产品时只需扩展子类。
缺点:类数量增加(每个产品需对应一个子类)。
示例:class AnimalFactory {public: virtual Animal* createAnimal() = 0;};class DogFactory : public AnimalFactory {public: Animal* createAnimal() override { return new Dog(); }};
抽象工厂模式
核心:创建相关或依赖对象的家族,而非单一对象。
实现:通过抽象接口定义一组产品,具体工厂实现所有产品的创建。
优点:确保产品族的一致性(如同时创建UI的按钮和文本框)。
缺点:新增产品族时需修改所有工厂类。
示例:class UIFactory {public: virtual Button* createButton() = 0; virtual TextBox* createTextBox() = 0;};class WindowsUIFactory : public UIFactory {public: Button* createButton() override { return new WindowsButton(); } TextBox* createTextBox() override { return new WindowsTextBox(); }};
C++中的工厂模式通过封装对象创建过程,显著提升了代码的灵活性和可维护性。选择具体形式时需权衡:
实际应用中,应避免过度设计,仅在对象创建逻辑复杂或需动态生成时使用。